Android set edit text style globally in theme doesn't work

20,934

Solution 1

instead of this..

<item name="android:editTextStyle">@style/EditTextDefault</item>

use this..

<item name="editTextStyle">@style/EditTextDefault</item>

Solution 2

What Should You Do

Use this @android:style/Widget.EditText instead parent="android:Widget.EditText" .I hope it will helps you .

Please read This SO Answer Set a consistent style to all EditText

<style name="EditTextDefault" parent="@android:style/Widget.EditText">

Solution 3

if your are using appcompat >v22 you can try using

<style name="EditText.Colored" parent="Theme.AppCompat">
    <item name="colorControlNormal">@color/colorNormal</item>
    <item name="colorControlActivated">@color/colorActivated</item>
    <item name="colorControlHighlight">@color/colorControlHighlight</item>
</style>

and in your layout.xml set the android:theme propertie to the edittext

<EditText
    android:id="@+id/edit_text_login"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/edit_text_password"
    android:theme="@style/EditText.Colored"
    android:hint="@string/hint_enter_login"
    android:inputType="textEmailAddress" />

Solution 4

In addition to fixing the reference to the Widget.EditText:

<style name="EditTextDefault" parent="@android:style/Widget.EditText">

You need to create a "theme" and apply it in your manifest. Like this:

<application
    ...
    android:theme="@android:style/DefaultAppTheme" >
</application>
Share:
20,934

Related videos on Youtube

exlwzicx
Author by

exlwzicx

Updated on August 06, 2022

Comments

  • exlwzicx
    exlwzicx almost 2 years

    I am facing with problem. I am trying to make edit texts in my app look the same with the help of theme.
    I have generated styles with the help of online tools (9-patch images) and tried to set it in my theme like this

       <!-- Base application theme. -->
        <style name="DefaultAppTheme" parent="Theme.AppCompat">
            <!-- Main theme colors -->
            <!--   your app branding color for the app bar -->
            <item name="colorPrimary">@color/blue</item>
            <!--   darker variant for the status bar and contextual app bars -->
            <item name="colorPrimaryDark">@color/darkblue</item>
            <!--   theme UI controls like checkboxes and text fields -->
            <item name="colorAccent">@color/cornflowerblue</item>
            <item name="windowNoTitle">true</item>
            <item name="windowActionBar">false</item>
            <item name="android:editTextStyle">@style/EditTextDefault</item>
        </style>
    

    My style for edit text

    <style name="EditTextDefault" parent="android:Widget.EditText">
            <item name="android:background">@drawable/edit_text_holo_light</item>
            <item name="android:textColor">@color/light_blue</item>
            <item name="android:layout_marginLeft">@dimen/margin_edit_text_default</item>
            <item name="android:layout_marginRight">@dimen/margin_edit_text_default</item>
            <item name="android:layout_marginTop">@dimen/margin_edit_text_default</item>
        </style>
    

    But this doesn't work if use edit text without specifying style manually for each edit text.

    This doesn't work

    <EditText
        android:id="@+id/edit_text_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/edit_text_password"
        android:hint="@string/hint_enter_login"
        android:inputType="textEmailAddress" />
    

    This works

    <EditText
        android:id="@+id/edit_text_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/edit_text_password"
        style="@style/EditTextDefault"
        android:hint="@string/hint_enter_login"
        android:inputType="textEmailAddress" />
    

    I know that layout_* params will not affect if they are used in theme, but other attributes should work.

    Please help with this problem.

    • Bartek Lipinski
      Bartek Lipinski over 8 years
      that's weird... the same setup (although EditTextDefault should probably inherit from @android:style/Widget.EditText instead of android:Widget.EditText) works for me without the need to specify style tag for EditText
    • IntelliJ Amiya
      IntelliJ Amiya over 8 years
      @blipinsk You are right
    • Emre A
      Emre A almost 4 years
      You can also use this line in your default theme <item name="editTextColor">@color/black</item>
  • Jongz Puangput
    Jongz Puangput over 7 years
    It's a resource style, which support the api you're running, you can use both.
  • Ionut Negru
    Ionut Negru over 6 years
    Do you know if there is a way to set EditText theme in a app theme?
  • Ângelo Polotto
    Ângelo Polotto about 6 years
    Thanks a lot! Can I use that same logic to others componentes?
  • Daniel Gomez Rico
    Daniel Gomez Rico almost 4 years
    Can you develop the answer so it reffers to create a generic theme only for EditText? you are overriding the general app theme with the EditText, and it does not make any sense.