Ваше запитання: Як вимкнути взаємодію користувача, поки ProgressBar видно в android?
Щоб вимкнути взаємодію з користувачем, вам просто потрібно додати наступний код
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
Щоб повернути взаємодію з користувачем, вам просто потрібно додати наступний код
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
Ось приклад:
Примітка: Я даю вам лише приклад, щоб показати, як вимкнути або зберегти взаємодію користувача
Додайте індикатор виконання у свій xml. Щось подібне
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:visibility="gone"/>
У MainActivity при натисканні кнопки ви показуєте індикатор прогресу та вимикаєте взаємодію користувача.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.imageView);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProgressBar.setVisibility(View.VISIBLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
});
}
І коли користувач backPress ви видаляєте індикатор прогресу знову, зберігаючи взаємодію користувача. Щось подібне
@Override
public void onBackPressed() {
super.onBackPressed();
mProgressBar.setVisibility(View.GONE);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
Якщо ви хочете додати функцію вимкнення та сірого відображення, вам потрібно додати у свій файл макета xml лінійний макет, який заповнює батьківський. Встановіть для тла # B0000000, а visibilty
для - GONE
. Потім програмно встановіть його visibility
на VISIBLE
.
Сподіваюся, це допоможе!