W mojej aplikacji jest wiele okien dialogowych z alertami. Jest to układ domyślny, ale do okna dialogowego dodam przyciski pozytywów i negatywów. Tak więc przyciski otrzymują domyślny kolor tekstu Androida 5 (zielony). Próbowałem to zmienić bez powodzenia. Masz pomysł, jak zmienić ten kolor tekstu?
Moje niestandardowe okno dialogowe:
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);
} }
Tworzenie okna dialogowego:
MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage);
builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
...
}
}).show();
Ten NegativeButton jest domyślnym przyciskiem okna dialogowego i przyjmuje domyślny zielony kolor z Androida 5 Lollipop.
Wielkie dzięki
Odpowiedzi:
Możesz spróbować
AlertDialog
najpierw utworzyć obiekt, a następnie użyć go do ustawienia zmiany koloru przycisku, a następnie go pokazać. (Zauważ, że nabuilder
obiekcie zamiast wywoływaćshow()
wywołanie,create()
aby pobraćAlertDialog
obiekt:Powodem, dla którego musisz to zrobić
onShow()
i nie możesz po prostu uzyskać tego przycisku po utworzeniu okna dialogowego, jest to, że przycisk nie zostałby jeszcze utworzony.Zmieniłem się
AlertDialog.BUTTON_POSITIVE
na,AlertDialog.BUTTON_NEGATIVE
aby odzwierciedlić zmianę w Twoim pytaniu. Chociaż to dziwne, że przycisk „OK” byłby przyciskiem ujemnym. Zwykle jest to przycisk pozytywny.źródło
Oto naturalny sposób na zrobienie tego ze stylami:
Jeśli Twój
AppTheme
jest dziedziczony zTheme.MaterialComponents
, to:Jeśli Twój
AppTheme
jest dziedziczony zTheme.AppCompat
:Użyj swojego
AlertDialogTheme
w swoimAppTheme
lub w konstruktorze
źródło
com.google.android.material:material:1.0.0-beta01
i używam Theme.MaterialComponents.Light.Dialog.AlertKolor przycisków i innego tekstu można również zmienić za pomocą motywu:
Wynik:
źródło
android:
część ziandroid:alertDialogTheme
zandroid:colorAccent
.Najprostszym rozwiązaniem jest:
źródło
AlertDialog.BUTTON_NEGATIVE
itd.Istnieją dwa sposoby zmiany koloru przycisku dialogowego.
Podstawowy sposób
Jeśli chcesz po prostu zmienić działanie, napisz poniższe dwa wiersze po
alertDialog.show();
Zalecana
Zalecam dodanie motywu
AlertDialog
w programie,styles.xml
aby nie trzeba było wielokrotnie pisać tego samego kodu w każdym wywołaniu działania / dialogu. Możesz po prostu utworzyć styl i zastosować ten motyw w oknie dialogowym. Więc kiedy chcesz zmienić kolor okna AlertDialog, po prostu zmień kolor w styles.xml, a wszystkie okna dialogowe zostaną zaktualizowane w całej aplikacji.I zastosuj motyw w
AlertDialog.Builder
źródło
Jeśli chcesz zmienić kolor tekstu przycisków (pozytywny, negatywny, neutralny) po prostu dodaj do własnego stylu okna dialogowego:
Twój styl okna dialogowego musi więc wyglądać następująco:
źródło
Kolor przycisków i innego tekstu można również zmienić za pomocą appcompat:
źródło
W motywie / stylu aplikacji dodaj następujące wiersze:
Następnie dodaj następujące style:
Użycie tej metody sprawia, że nie trzeba ustawiać motywu w konstruktorze AlertDialog.
źródło
Na marginesie:
Kolory przycisków (i całego stylu) zależą również od aktualnego motywu, który może się różnić w przypadku użycia jednego z nich
lub
(Lepiej użyć drugiego)
źródło
Oto jak to robisz: Prosty sposób
źródło
dla mnie było inaczej, użyłem motywu przycisku
i ponieważ
był tam biały… nie widziałem żadnego tekstu na przycisku (przyciski dialogowe to w zasadzie również przyciski). tam idziemy, zmieniliśmy to, naprawiliśmy.
źródło