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

84

Я пытаюсь сделать все 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имеют последовательный стиль, и мне не нужно указывать стиль для каждого экземпляра.

Кодовый Поэт
источник

Ответы:

155

Переопределите атрибут, указывающий на 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>

Редактировать:

Если вы используете гораздо более новые темы, связанные с AppCompat, используйте атрибут editTextStyle без префикса android:

<style name="App_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>
пользователь
источник
3
Это звучит правдоподобно и логично, но, похоже, мне это не подходит. Могу я что-то упустить?
Code Poet
1
@ManishGupta Как именно не работает? Я протестировал приведенные выше стили, и они работают, НО layout_height/heightих нельзя вставить, потому что Android, вероятно, проверяет эти атрибуты перед стилями темы и будет жаловаться на их отсутствие. Но настраиваемый рисунок + другой цвет текста работает с указанным выше.
пользователь
У меня все устроено именно так, как вы описываете. В моем репосте нет смысла. Я все равно отдаю это тебе. Я где-то что-то упускаю. То, что вы прописываете, является холодной логикой и должно работать. Я вернусь к этому после того, как остыну. Благодарю.
Code Poet
3
@ toobsco42 edittextStyleне относится к AutoCompleTextView(хотя это EditText). Посмотрите на autoCompleteTextViewStyleатрибут в theme.xml, который указывает на Widget.AutoCompleTextViewстиль в файле style.xml.
пользователь
3
У меня тоже не работает. Но если я перейду <item name="android:editTextStyle">на <item name="editTextStyle">, все в порядке. Благодаря!
Sam Sch
52

@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>
iflp
источник
1
У меня тоже работает. Но почему он так себя ведет?
Eagle_Eye 09
3
Возможно, это связано с AppCompatбиблиотекой. Ваша деятельность расширяется AppCompatActivity? О, загадки разработки под Android.
Мэтт Жуковски
1
@MattZukowski немного покопался на основе вашего комментария - вероятный виновник: с этого AppCompat v7:21+момента стандартные атрибуты темы необходимо использовать без префикса «android:» в стилях.
iflp 06
Спасибо за это.
Адам Вархеги
Прекрасно работает даже без использования Widget.AppCompat.EditText .. Но я не могу получить доступ к Widget.AppCompat.EditText. Говорит «не удается разрешить символ '@android: style / Widget.AppCompat.EditText'»
Нери
18

Сначала определите стиль для вашего 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>
Рейнальдо Агилар
источник
1

Если вам просто нужно установить несколько простых параметров, например цвет текста, пространство имен Android имеет несколько параметров, которые сделают это без необходимости объявлять отдельный стиль для текста редактирования. Например

<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>
Фил Блэндфорд
источник
Для более новой версии AppCompat используйте editTextColorи удалите android:.
Армин
-2
<style name="App_Theme" parent="@android:style/Theme.Holo">    
    <item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item>
</style>
user1700099
источник