Мне нужно показать AlertDialog, и я должен ждать ввода пользователя, чтобы продолжить с кодом. Все работает, но все, что за пределами alertDialog, черное. Я хочу, чтобы активность в фоновом режиме была видна. Когда я не использую обработчик, экран вокруг AlertDialog прозрачен, но программа продолжается, не дожидаясь ввода пользователя. Это мой код:
AlertDialog alertDialog;
// Handler for blocking until user input is received
final Handler handler = new Handler() {
@Override
public void handleMessage(Message mesg) {
throw new RuntimeException();
}
};
// Create a alert dialog builder.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// Get custom form view.
View formView = getLayoutInflater().inflate(R.layout.activity_form, null);
// Set above view in alert dialog.
builder.setView(formView);
// doneButton click listener.
MaterialButton doneButton = (MaterialButton) formView.findViewById(R.id.done_button);
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
// Close Alert Dialog.
handler.sendMessage(handler.obtainMessage());
alertDialog.cancel();
} catch(Exception ex) {
ex.printStackTrace();
}
}
});
alertDialog = builder.create();
alertDialog.show();
try {
Looper.loop();
} catch (RuntimeException e) {
e.printStackTrace();
}
Что я пробовал до сих пор:
- Использование Dialog
вместо AlertDialog
и затем getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
- Определение стиля:
<style name="AlertDialogTheme" parent="Theme.MaterialComponents.Light.Dialog.Alert">
<item name="android:background">@color/transparent</item>
</style>
а затем использовать его так:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.);