Как использовать и стиль новый AlertDialog от совместимости приложений 22.1 и выше



Я пытаюсь перейти с Android по умолчанию AlertDialog к новому включенному в appCompat-22.1
Пока я понимаю, что вам нужно только импортировать android.support.v7.app.AlertDialog пакета, чтобы использовать его.



но как я могу его стиль? Например, изменить положительные / отрицательные цвета кнопок, цвет заголовка, цвет сообщения и цвет фона?

496   5  

5 ответов:

при создании AlertDialog вы можете установить тему для использования.

пример-создание диалогового окна

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

стили.xml-пользовательский стиль

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>
</style>

результат

styled alertdialog

Edit

чтобы изменить внешний вид заголовка, вы можете сделать следующее. Сначала добавьте новый стиль:

<style name="MyTitleTextStyle">
    <item name="android:textColor">#FFEB3B</item>
    <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>

после этого просто ссылаться на это стиль в вашем MyAlertDialogStyle:

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    ...
    <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>

таким образом, вы можете определить другое textColor для сообщения через android:textColorPrimary и другой для названия через стиль.

чтобы использовать тему для всего приложения, и не используйте второй параметр для стиля вашего диалога

<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
    <item name="alertDialogTheme">@style/dialog</item>
    <item name="colorAccent">@color/accent</item>
</style>

<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/accent</item>
</style>

в моем приложении с помощью цветового акцента в теме не отображаются кнопки alertDialog с темой colorAccent мне нужно добавить стиль диалога в тему.

Если вы хотите использовать новый Android.поддержка.v7.приложение.AlertDialog и имеют разные цвета для кнопок, а также имеют пользовательский макет, а затем посмотрите на мой https://gist.github.com/JoachimR/6bfbc175d5c8116d411e

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.custom_layout, null);

    initDialogUi(v);

    final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
            .setTitle(getString(R.string.some_dialog_title))
            .setCancelable(true)
            .setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            doSomething();
                            dismiss();
                        }
                    })
            .setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dismiss();
                        }
                    })
            .setView(v)
            .create();

    // change color of positive button         
    d.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
            b.setTextColor(getResources().getColor(R.color.colorPrimary));
        }
    });

    return d;
}

enter image description here

следуйте @обратный ответ, но в моем случае, у меня уже было некоторое свойство в моем AppTheme как

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:textColor">#111</item>
    <item name="android:textSize">13sp</item>
</style>

так что мой диалог будет выглядеть
enter image description here

я решил это с помощью

1) изменить импорт из android.app.AlertDialog to android.support.v7.app.AlertDialog
2) я переопределяю свойство 2 в AppTheme С null значением

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>


    <item name="android:textColor">@null</item>
    <item name="android:textSize">@null</item>
</style>

.

AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);

надеюсь, что это поможет другим людям

enter image description here

    <item name="editTextColor">@color/white</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">@color/gray</item>
    <item name="android:textColorPrimary">@color/gray</item>
    <item name="colorControlNormal">@color/gray</item>
    <item name="colorControlActivated">@color/white</item>
    <item name="colorControlHighlight">#30FFFFFF</item>

Comments

    Ничего не найдено.