Установите согласованный стиль для всего EditText (например,)

Я пытаюсь сделать все EditText в моем приложении устойчивым. Я знаю, что могу сделать что-то вроде этого:

<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>

Тогда я могу сделать конкретный EditText этот стиль, выполнив следующее:

<EditText ...
    style="@style/App_EditTextStyle
    ...>

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

Есть ли способ сделать это частью темы или чего-то еще? Это значит, что мне не нужно связывать этот стиль с каждым EditText. Что-то вроде этого фиктивного блока кода:

<style name="App_Theme" parent="@android:style/Theme.Holo">
   ... 
   <item name="android:EditTextSyle">@style/App_EditTextStyle</item>
   ...
<style>

И затем в моем AndroidManifest.xml у меня есть что-то вроде:

<application
    ....
    android:theme="@style/App_Theme">

И Вуаля! все мои EditText имеют согласованный стиль без необходимости указывать стиль для каждого экземпляра.

Ответ 1

Отмените атрибут, указывающий на стиль EditText (с именем editTextStyle:)) в пользовательской теме:

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="android:editTextStyle">@style/App_EditTextStyle</item>
</style>

и добавьте свой собственный стиль Widget.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>

Ответ 2

@Luksprog ответ правильный, но не работает для меня. После некоторых экспериментов я узнал, что удаление пространства имен android из editTextStyle заставило его работать для меня.

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

и создайте свой собственный стиль для расширения Widget.EditText или при использовании темы AppCompat Widget.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>

Ответ 3

Сначала определите стиль для вашего EditText. Убедитесь, что родительский стиль android:Widget.EditText

<style name="CustomEditTextStyle" parent="android:Widget.EditText">

    <item name="android:textColor">#0F0F0F</item>
    <!-- ... More items here if needed ... -->
</style>

После этого переопределите атрибут android:editTextStyle в пользовательской теме. Помните, что если вы используете библиотеку поддержки, вам также необходимо переопределить атрибут editTextStyle (без пространства имен android).

<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>

Ответ 4

<style name="App_Theme" parent="@android:style/Theme.Holo">    
    <item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item>
</style>