Удалить тусклое время AlertDialog - PullRequest
0 голосов
/ 29 февраля 2020

Эффект затемнения AlertDialog можно отключить с помощью:

alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

Кроме того, величину затемнения можно изменить с помощью:

 alertDialog.getWindow().setDimAmount(0.0f);

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

При попытке заменить стандартное затемнение на имитирующий вид экран выглядит как sh из-за анимации изменения затемнения.

Редактировать: Вот базовая тема приложения:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

AlertDialog был создан из AlertDialog.Builder (прослушиватели кликов были добавлены позже):

    dialogBuilder=new AlertDialog.Builder(this);
    dialogBuilder.setTitle("Title").setIcon(null).setMessage("Description")
            .setNeutralButton("Neutral",null).setNegativeButton("Cancel",null).setPositiveButton("Ok",null);
    alertDialog=dialogBuilder.create();

Ответы [ 3 ]

0 голосов
/ 29 февраля 2020

Если вы хотите, чтобы во всех диалогах было отключено диммирование, вы можете сделать что-то вроде этого: Go для стилей. xml, затем в вашей основной теме добавьте:

<item name="alertDialogTheme">@style/MyAlertDialogTheme</item>

Затем ниже которые добавляют другую тему (ту, на которую мы ссылаемся выше)

<style name="MyAlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
     <item name="android:backgroundDimEnabled">false</item>
</style>

Кроме того, если вы хотите очень низкое затемнение, вы можете изменить его на:

<item name="android:backgroundDimAmount">0.05</item>
0 голосов
/ 29 февраля 2020

Как показывают другие ответы, я решил, что лучше вообще отключить эффект затемнения. Я не хотел переопределять все AlertDialogs, поэтому он, кажется, работает достаточно хорошо, просто используя фон View и затемняя его setOnShowListener и setOnDismissListener.

alertDialog=dialogBuilder.create();
alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

alertDialog.setOnShowListener(new DialogInterface.OnShowListener(){
    @Override public void onShow(DialogInterface dialog) {
        background.setAlpha(0f);background.setVisibility(View.VISIBLE);background.animate().alpha(1f).setDuration(dur);
    }
});

alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener(){
    @Override public void onDismiss(DialogInterface dialog){
          background.animate().alpha(0f).withEndAction(runnable_background_gone);
    }
});
0 голосов
/ 29 февраля 2020

добавьте это к своей теме:

        <item name="android:backgroundDimEnabled">false</item>

И управляйте темой строго из кода

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

<style name="DialogTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
     <item name="android:backgroundDimEnabled">false</item>
</style>


dialogBuilder = new AlertDialog.Builder(this, R.style.DialogTheme);
...