Подтвердить что ты не робот

Текст диалогового окна Android 6.0 не отображается

Я обновил свой телефон до Android 6.0, и у меня есть две проблемы с диалоговыми окнами:

1) Заголовок отображается, но сообщения не для диалогового окна предупреждения (SOLVED):

        new AlertDialog.Builder(context).setTitle("Title").setMessage("Message");

2) Также не отображается имя фрагмента пользовательского диалога (НЕ РЕШЕНО):

        getDialog().setTitle("Title");

Не было такой проблемы в lollipop или в более старых версиях, проблема возникла только после обновления моего телефона до зефира.

Как решить проблему?

4b9b3361

Ответ 1

Используйте конструктор с темой для Lollipop и более новых версий Android:

Темная тема

    AlertDialog.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Dialog_Alert);
    } else {
        builder = new AlertDialog.Builder(context);
    }

И для Легкая тема

    AlertDialog.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Light_Dialog_Alert);
    } else {
        builder = new AlertDialog.Builder(context);
    }

Ответ 2

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

<item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>

Хотя это верно, он не работал во всех местах для меня. В конце концов, я понял, что в некоторых местах я использовал обычный AlertDialog-строитель, а в других местах я использовал конструктор поддержки. Если вы используете поддержку AlertDialog, обязательно включите в свою тему следующее:

<item name="alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>

Ответ 3

Просто поместите это в свой файл стилей в свой тег стиля базовой темы, и вам хорошо идти

<item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>

Ответ 4

Ответ на 2), нам нужно вызвать setStyle() до onCreateDialog(), потому что theme используется в onCreateDialog()

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setStyle(STYLE_NORMAL, android.R.style.Theme_Material_Light_Dialog_Alert);
    }
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.setTitle(R.string.dialog_title);
    return dialog;
}

Ответ 5

Я попытался исправить эту проблему, создав собственный стиль.

ваш объект диалога должен быть таким, и ваш стиль, указывающий на этот диалог, будет написан ниже

new AlertDialog.Builder(new ContextThemeWrapper(Context, R.style.Dialog))
            .setTitle("Title")
            .setMessage("Sample Message ...").show();

R.style.Dialog::

<style name="Dialog">
    <item name="android:textColorPrimary">@color/primary_text</item>
    <item name="android:textColor">@color/primary_color</item>
</style>

Цвета::

<color name="primary_text">#212121</color>
<color name="primary_color">#2196f3</color>

Наконец, результат должен быть примерно таким

Примечание: "android: textColorPrimary" идет для диалога setMessage и "android: textColor" идет для диалога setTitle; я не использую setPositive и setNegative кнопку и слушатель в моем объекте диалога, но вы можете видеть их на картинке, если хотите, чтобы вы могли создать свой собственный объект диалога.

Ответ 6

new AlertDialog.Builder(context)
    .setTitle("Delete entry")
    .setMessage("Are you sure you want to delete this entry?")
    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // continue with delete
        }
     })
    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // do nothing
        }
     })
    .setIcon(android.R.drawable.ic_dialog_alert)
     .show();

Надеюсь, это поможет вам.............

Ответ 7

Я подозреваю, что вы заканчиваете показывать белый текст на белом фоне! (Глядя на скриншот, значок (i) тоже не отображается хорошо, предполагая, что он был предназначен для отображения на фоне, отличном от белого.

Вы можете использовать конструктор public AlertDialog.Builder (Context context, int themeResId), чтобы убедиться, что вы используете определенную тему для стиля своего диалога, где Theme_Material_Dialog - это то, что вы хотите.

Ответ 8

Возможно, ваш основной цвет текста совпадает с цветом фона диалога, в этом случае в вашем использовании styles.xml(просто пример):

<style name="AlertDialog" parent="@android:style/Theme.Material.Light.Dialog.Alert">
    <item name="android:textColor">#000000</item>
</style>

и в создании диалога:

new AlertDialog.Builder(
        new ContextThemeWrapper(getContext(), R.style.AlertDialog))
).setMessage("test");

Ответ 9

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.dialog_fire_missiles)
               .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // FIRE ZE MISSILES!
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }

После проверки этой надежды это будет работать........

Ответ 10

В моем случае все диалоги имели тот же цвет, что и шрифты (заголовок и сообщение). То, что я сделал, чтобы исправить это состояние, - это изменение атрибута цвета в моей теме. Я скопировал файл темы xml в "res/values-v22" и установил другой цвет для зефира.

<resources>
    <style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:textColorPrimary">@android:color/tertiary_text_dark</item>
    </style>
</resources>

или только для диалогов

<resources>
    <style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:alertDialogTheme">@style/LywAlertDialogStyle</item>
    </style>
    <style name="LywAlertDialogStyle" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
        <item name="android:textColorPrimary">@color/lyw_secondary_text_color</item>
    </style>
</resources>

Ответ 11

При использовании DialogFragment вам нужно

  • Добавить стиль

    <style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog">
        <item name="android:windowNoTitle">false</item>
    </style>
    
  • В DialogFragment добавить getTheme

    public class CustomDialogFragment extends DialogFragment{
        public int getTheme() { 
            return R.style.CustomDialogFragment; 
        }
        .
        .
        .
    

И что это!