Отключить всю активность от действия пользователя

Есть ли простой способ отключить пользователя, взаимодействующего с активностью. Выполнение, когда выполняется действие (и индикатор выполнения в строке заголовка)

EDIT: Как мне кажется, я не был достаточно ясен, я хотел сказать: хотя у меня уже есть индикатор выполнения, пользователь все еще может нажать любую кнопку на этом мероприятии, я хочу отключить пользователя от возможности сделать это, пока Задача запущена. Я не хочу, однако, отключать каждый элемент на экране один за другим.

Спасибо, Джейсон

Solutions Collecting From Web of "Отключить всю активность от действия пользователя"

Чтобы заблокировать события пользовательского касания, используйте:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 

Чтобы вернуть события касания, используйте:

 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 

EDIT: если вы хотите добавить функцию отключения и greyed out, вам нужно добавить в свой файл макета xml линейный макет, который заполняет родительский элемент. Установите фон на # B0000000 и его видимость на Gone. Затем программно установите видимость на Visible.

Если вам нужно отключить обработку событий в течение определенного периода времени (например, при запуске анимации, покажите диалог ожидания), вы можете переопределить функции отправки активности.

Чтобы отключить сенсорные кнопки / кнопки на любых кнопках, добавьте эти элементы / функции в свою деятельность:

 protected boolean enabled = true; public void enable(boolean b) { enabled = b; } @Override public boolean dispatchTouchEvent(MotionEvent ev) { return enabled ? super.dispatchTouchEvent(ev) : true; } 

Затем просто позвоните enable(true/false) когда вам нужно отключить и включить нормальную обработку событий.

Используйте AsyncTask с компонентом ProgressDialog.

  1. AsyncTask

  2. Диалог прогресса

Другой полезный пример:

http://www.screaming-penguin.com/node/7746

Я решил это с помощью специального метода, который я не хотел делать:

 public static void setViewGroupEnabled(ViewGroup view, boolean enabled) { int childern = view.getChildCount(); for (int i = 0; i< childern ; i++) { View child = view.getChildAt(i); if (child instanceof ViewGroup) { setViewGroupEnabled((ViewGroup) child, enabled); } child.setEnabled(enabled); } view.setEnabled(enabled); } 

Если кто-нибудь найдет лучший способ, я бы хотел услышать об этом! Благодарю.

Я решил это, добавив полноэкранное пустое изображение с обработчиком нулевого щелчка в конце на макете XML.

Создайте прозрачный PNG-файл в папке drawables.

Добавить полный экран ImageView в конце XML-макета, ссылающегося на изображение:

 ... <ImageView android:layout_width="match_parent" android:layout_height="match_parent" app:srcCompat="@drawable/img_mask" android:id="@+id/imgMask" android:scaleType="fitXY" android:visibility="gone" android:onClick="doNothingClick" /> 

Добавьте обработчик нулевого щелчка для изображения, чтобы зафиксировать пользовательские касания:

 public void doNothingClick(View v){ // do nothing with the click } 

Добавьте код, чтобы отключить пользователя:

 private void StopTouches(int duration){ findViewById(R.id.imgMask).setVisibility(View.VISIBLE); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { findViewById(R.id.imgMask).setVisibility(View.GONE); } }, duration); } 

SpinningProgress в заголовке:

 //onCreate(): activity.requestWindowFeature(FEATURE_INDETERMINATE_PROGRESS); //and then: activity.setProgressBarIndeterminate(boolean indeterminate) 

Как в классе активности

Другой вариант – использовать диалоговое окно «Прогресс» (вы можете установить на нем значение «cancelable to false»).