Su pregunta: ¿Cómo deshabilitar la interacción del usuario mientras ProgressBar está visible en Android?
Para deshabilitar la interacción del usuario solo necesita agregar el siguiente código
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
Para recuperar la interacción del usuario, solo necesita agregar el siguiente código
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
A continuación se muestra un ejemplo:
Nota: le doy solo un ejemplo para mostrar cómo deshabilitar o retener la interacción del usuario
Agrega una barra de progreso en tu xml, algo como esto
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:visibility="gone"/>
En MainActivity, cuando se presiona un botón, muestra la barra de progreso y deshabilita la interacción del usuario.
@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);
}
});
}
Y cuando el usuario retrocede, eliminas la barra de progreso y retienes la interacción del usuario.
@Override
public void onBackPressed() {
super.onBackPressed();
mProgressBar.setVisibility(View.GONE);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
Si desea agregar una función de visualización desactivada y atenuada, debe agregar en su archivo de diseño xml un diseño lineal que llene el primario. Establezca su fondo en # B0000000 y su visibilty
a GONE
. Luego, establezca programáticamente su visibility
en VISIBLE
.
¡Espero que esto ayude!