Как изменить цвет текста диалоговой кнопки по умолчанию в android 5
у меня есть много диалоговых окон оповещения в моем приложении. Это макет по умолчанию, но я добавляю положительные и отрицательные кнопки в диалоговом окне. Таким образом, кнопки получают цвет текста по умолчанию Android 5 (Зеленый). Я попытался изменить его без успеха. Есть идеи, как изменить этот цвет текста?
мой пользовательский диалог:
public class MyCustomDialog extends AlertDialog.Builder {
public MyCustomDialog(Context context,String title,String message) {
super(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View viewDialog = inflater.inflate(R.layout.dialog_simple, null, false);
TextView titleTextView = (TextView)viewDialog.findViewById(R.id.title);
titleTextView.setText(title);
TextView messageTextView = (TextView)viewDialog.findViewById(R.id.message);
messageTextView.setText(message);
this.setCancelable(false);
this.setView(viewDialog);
} }
создание диалогового окна:
MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage);
builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
...
}
}).show();
что negativeButton является диалоговой кнопкой по умолчанию и принимает зеленый цвет по умолчанию от Android 5 Леденец.
большое спасибо
9 ответов:
вы можете попробовать создать
AlertDialog
объект, а затем использовать его для настройки, чтобы изменить цвет кнопки, а затем показать его. (Обратите внимание, что наbuilder
объект вместо вызоваshow()
мы называемcreate()
для получения
цвет кнопок и другого текста также можно изменить с помощью темы:
значения-21/стили.xml
<style name="AppTheme" parent="..."> ... <item name="android:timePickerDialogTheme">@style/AlertDialogCustom</item> <item name="android:datePickerDialogTheme">@style/AlertDialogCustom</item> <item name="android:alertDialogTheme">@style/AlertDialogCustom</item> </style> <style name="AlertDialogCustom" parent="android:Theme.Material.Light.Dialog.Alert"> <item name="android:colorPrimary">#00397F</item> <item name="android:colorAccent">#0AAEEF</item> </style>
результат:
вот естественный способ сделать это через стили:
<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item> <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item> </style> <style name="NegativeButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">#f00</item> </style> <style name="PositiveButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">#00f</item> </style>
Set
AlertDialogTheme
через этот атрибут в свойAppTheme
<item name="alertDialogTheme">@style/AlertDialogTheme</item>
или через конструктор в builder
new AlertDialog.Builder(context, R.style.AlertDialogTheme)
самое простое решение-это:
dialog.show(); //Only after .show() was called dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(neededColor); dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(neededColor);
Если вы хотите изменить цвет текста кнопок (положительный, отрицательный, нейтральный), просто добавьте в свой собственный стиль диалога:
<item name="colorAccent">@color/accent_color</item>
Итак, ваш диалог должен выглядеть так:
<style name="AlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:textColor">@android:color/black</item> <item name="colorAccent">@color/topeka_accent</item> </style>
есть два способа изменить цвет кнопки диалога.
Основным Способом
если вы просто хотите изменить в деятельности, напишите ниже две строки после
alertDialog.show();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorPrimary)); alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorPrimaryDark));
рекомендовано
Я рекомендую добавить темы
AlertDialog
наstyles.xml
поэтому вам не нужно писать один и тот же код снова и снова в каждом вызове activity/dialog. Вы можете просто создать стиль и применить эту тему в диалоговом окне. Так всякий раз, когда вы хотите изменить цвет окна AlertDialog, просто измените цвет в стилях.xml и все диалоговые окна будут обновлены во всем приложении.<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorAccent">@color/colorPrimary</item> </style>
и применить тему в
AlertDialog.Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogTheme);
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:colorPrimary">#00397F</item> <item name="android:textColorPrimary">#22397F</item> <item name="android:colorAccent">#00397F</item> <item name="colorPrimaryDark">#22397F</item> </style>
цвет кнопок и другого текста также можно изменить с помощью appcompat:
Так же, как боковое Примечание:
цвета кнопок (и весь стиль) также зависят от текущей темы, которая может быть довольно разной, когда вы используете
android.app.AlertDialog.Builder builder = new AlertDialog.Builder()
или
android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder()
(лучше использовать второй)
для меня это было по-другому, я использовал тему
<style name="ButtonLight_pink" parent="android:Widget.Button"> <item name="android:background">@drawable/light_pink_btn_default_holo_light</item> <item name="android:minHeight">48dip</item> <item name="android:minWidth">64dip</item> <item name="android:textColor">@color/tab_background_light_pink</item> </style>
и так
android: textColor
был белый Там... я не видел никакого текста кнопки (диалоговые кнопки в основном тоже кнопки). Ну вот, мы его изменили, починили.