Я проверил принятый ответ (Янива) на
Galaxy Tab A 9.7 Android 7.1.1: ok
Galaxy Tab A 8.0 Android 7 : ok
Galaxy Tab S4 Android 9 : no touch outside DialogFragment
Galaxy S5 Android 6.0.1 : ok
Galaxy Tab S2 Android 7 : ok
Galaxy Tab S3 Android 9 : no touch outside DialogFragment
Galaxy Tab S4 Android 9 : no touch outside DialogFragment
Galaxy Note Edge Android 6.0.1: ok
Galaxy Note4 Android 6.0.1 : ok
и действительно похоже, что это не работает на Android 9. Когда я говорю «не работает», я имею в виду, что когда я пытаюсь нажать кнопку, которая находится за пределами DialogFragment, ее метод onClick() вообще не вызывается.
EDIT: в свете моих выводов (в комментариях) я думаю, что ответ ниже должен быть принятым. Приведенное ниже работает везде, где я тестировал, включая эмуляторы, Google Pixel 6, LG Nexus 5X, HTC Desire 12, около 5 телефонов Huawei и около 20 телефонов Samsung под управлением всех версий Android 5–10.
public Dialog onCreateDialog(Bundle savedInstanceState)
{
FragmentActivity act = getActivity();
AlertDialog.Builder builder = new AlertDialog.Builder(act);
// ... do your stuff here....
Dialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(false);
Window window = dialog.getWindow();
if( window!=null )
{
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
return dialog;
}
person
Leszek
schedule
13.04.2020