注意: appcompat-v7:22.2.0 での話です。将来 fix される可能性もあります。
AppCompat を継承したテーマで EditText のデフォルトスタイルを上書きしようとして android:editTextStyle を使うと、5系以降しか適用されないという落とし穴があります。
結論
android: をつけずに editTextStyle で指定すると4系にも適用されます。ただし、parent が Widget.AppCompat.EditText の場合、5系でカーソルが白になります(解説参照のこと)。
背景を変えたいだけなら android:editTextBackground と editTextBackground 両方を指定するほうが、カーソルの色を維持できます。
解説
1. デフォルトの状態![]()
2. android:editTextStyle を指定した状態![]()
3. editTextStyle を指定した状態![]()
EditTextStyle の parent が android:Widget.EditText なので、4.4.2 のカーソルの色が黒になってしまっています。
4. parent が Widget.AppCompat.EditText なスタイルを editTextStyle を指定した状態![]()
今度は 5.0.0 のカーソルの色が白になった...
この白が何かというと、v12/values-v12.xml で android:textCursorDrawable に指定されている @drawable/abc_text_cursor_mtrl_alpha です。 これに accentColor で tint するのが適用されず白くなっているようです。たぶん。
android:editTextBackground
背景を変えるだけなら android:editTextBackground を指定するという方法もあります。 ただ、こちらも落とし穴があり、
- android:editTextBackground // 5系にしか適用されない
- editTextBackground // 4系にしか適用されない
という状態なので、両方指定する必要があります。
5. android:editTextBackground を指定した状態![]()
6. editTextBackground を指定した状態![]()
7. android:editTextBackground と editTextBackground を両方指定した状態![]()
AppCompat を継承したテーマで EditText のデフォルトスタイルを上書きしようとして android:editTextStyle を使うと、5系以降しか適用されないという落とし穴があります。
結論
android: をつけずに editTextStyle で指定すると4系にも適用されます。ただし、parent が Widget.AppCompat.EditText の場合、5系でカーソルが白になります(解説参照のこと)。
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="editTextStyle">@style/EditTextStyle</item> </style> <style name="EditTextStyle" parent="Widget.AppCompat.EditText"> <item name="android:background">#ccccff</item> </style> </resources>
背景を変えたいだけなら android:editTextBackground と editTextBackground 両方を指定するほうが、カーソルの色を維持できます。
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:editTextBackground">@drawable/blue</item> <item name="editTextBackground">@drawable/blue</item> </style> <drawable name="blue">#ccccff</drawable> </resources>
解説
1. デフォルトの状態
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> </style> </resources>

2. android:editTextStyle を指定した状態
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:editTextStyle">@style/EditTextStyle</item> </style> <style name="EditTextStyle" parent="android:Widget.EditText"> <item name="android:background">#ffffff</item> </style> </resources>

3. editTextStyle を指定した状態
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="editTextStyle">@style/EditTextStyle</item> </style> <style name="EditTextStyle" parent="android:Widget.EditText"> <item name="android:background">#ffcccc</item> </style> </resources>

EditTextStyle の parent が android:Widget.EditText なので、4.4.2 のカーソルの色が黒になってしまっています。
4. parent が Widget.AppCompat.EditText なスタイルを editTextStyle を指定した状態
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="editTextStyle">@style/EditTextStyle</item> </style> <style name="EditTextStyle" parent="Widget.AppCompat.EditText"> <item name="android:background">#ccccff</item> </style> </resources>

今度は 5.0.0 のカーソルの色が白になった...
この白が何かというと、v12/values-v12.xml で android:textCursorDrawable に指定されている @drawable/abc_text_cursor_mtrl_alpha です。 これに accentColor で tint するのが適用されず白くなっているようです。たぶん。
<style name="Base.V12.Widget.AppCompat.EditText" parent="Base.V7.Widget.AppCompat.EditText"> <item name="android:textCursorDrawable">@drawable/abc_text_cursor_mtrl_alpha</item> </style>
そこで、android:editTextBackground です。 android:editTextBackground
背景を変えるだけなら android:editTextBackground を指定するという方法もあります。 ただ、こちらも落とし穴があり、
- android:editTextBackground // 5系にしか適用されない
- editTextBackground // 4系にしか適用されない
という状態なので、両方指定する必要があります。
5. android:editTextBackground を指定した状態
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:editTextBackground">@drawable/yellow</item> </style> <drawable name="yellow">#ffff00</drawable> </resources>

6. editTextBackground を指定した状態
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="editTextBackground">@drawable/cyan</item> </style> <drawable name="cyan">#00ffff</drawable> </resources>

7. android:editTextBackground と editTextBackground を両方指定した状態
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:editTextBackground">@drawable/blue</item> <item name="editTextBackground">@drawable/blue</item> </style> <drawable name="blue">#ccccff</drawable> </resources>
