Staram się, aby wszystko EditText
w mojej aplikacji miało spójny wygląd. Mam świadomość, że mogę zrobić coś takiego:
<style name="App_EditTextStyle">
<item name="android:background">@drawable/filled_roundededges_box_dark</item>
<item name="android:textColor">#808080</item>
<item name="android:layout_height">45dip</item>
</style>
Następnie mogę stworzyć określony EditText
styl, wykonując następujące czynności:
<EditText ...
style="@style/App_EditTextStyle
...>
Ale w ten sposób muszę pamiętać o ustawianiu stylu indywidualnie dla każdego EditText
w mojej aplikacji, co jest żmudne, jeśli nie podatne na błędy.
Czy jest jakiś sposób, żebym mógł to uczynić częścią tematu lub czegoś takiego? Dlatego nie muszę kojarzyć tego stylu ze wszystkimi EditText
. Coś takiego jak ten fikcyjny blok kodu:
<style name="App_Theme" parent="@android:style/Theme.Holo">
...
<item name="android:EditTextSyle">@style/App_EditTextStyle</item>
...
<style>
A potem w moim AndroidManifest.xml
mam coś takiego:
<application
....
android:theme="@style/App_Theme">
I Voila! wszystkie moje EditText
mają spójny styl bez konieczności określania stylu dla każdego wystąpienia.
layout_height/height
nie można ich tam umieścić, ponieważ Android prawdopodobnie sprawdza te atrybuty przed stylami motywu i będzie narzekać, że ich brakuje. Ale niestandardowe rysowanie + inny kolor tekstu działa z powyższym.edittextStyle
nie ma zastosowania doAutoCompleTextView
(chociaż jestEditText
). Spójrz naautoCompleteTextViewStyle
atrybut w pliku theme.xml, który wskazuje naWidget.AutoCompleTextView
styl w pliku style.xml.<item name="android:editTextStyle">
na<item name="editTextStyle">
, wszystko jest w porządku. Dzięki!@Luksprog odpowiedź jest poprawna, ale nie działa dla mnie. Po kilku eksperymentach odkryłem, że usunięcie przestrzeni nazw Androida z editTextStyle sprawiło, że zadziałało.
<style name="App_Theme" parent="@android:style/Theme.Holo"> <item name="editTextStyle">@style/App_EditTextStyle</item> </style>
i
Widget.EditText
spraw, aby Twój niestandardowy styl został rozszerzony lub jeśli używasz motywu AppCompatWidget.AppCompat.EditText
:<style name="App_EditTextStyle" parent="@android:style/Widget.EditText"> <item name="android:background">@drawable/filled_roundededges_box_dark</item> <item name="android:textColor">#808080</item> <item name="android:layout_height">45dip</item> </style>
źródło
AppCompat
biblioteką. Czy Twoja działalność się wydłużaAppCompatActivity
? Och, tajemnice rozwoju Androida.AppCompat v7:21+
początku standardowe atrybuty motywu muszą być używane bez przedrostka „android:” w stylach.Najpierw zdefiniuj styl dla swojego EditText. Upewnij się, że styl nadrzędny to
android:Widget.EditText
<style name="CustomEditTextStyle" parent="android:Widget.EditText"> <item name="android:textColor">#0F0F0F</item> <!-- ... More items here if needed ... --> </style>
Następnie zastąp atrybut
android:editTextStyle
w kompozycji niestandardowej. Należy pamiętać, że jeśli korzystasz z biblioteki obsługi, musisz również zastąpić atrybuteditTextStyle
(bez przestrzeni nazw Androida).<style name="App_Theme" parent="..."> <item name="android:editTextStyle">@style/CustomEditTextStyle</item> <item name="editTextStyle">@style/CustomEditTextStyle</item> <!-- For compatibility with the support library --> </style>
źródło
Jeśli potrzebujesz tylko ustawić kilka prostych parametrów, takich jak kolor tekstu, przestrzeń nazw Androida ma kilka parametrów, które zrobią to bez konieczności deklarowania oddzielnego stylu dla tekstu edycji. Na przykład
<style name="MyStyle" parent="android:Theme.Material.NoActionBar"> <item name="colorPrimary">@color/black</item> <item name="colorPrimaryDark">@color/white</item> <item name="colorAccent">@color/white</item> <item name="android:textColor">@color/black</item> <item name="android:editTextColor">@color/black</item> <item name="android:editTextBackground">@color/black</item> .... </style>
źródło
editTextColor
i usuńandroid:
.<style name="App_Theme" parent="@android:style/Theme.Holo"> <item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item> </style>
źródło