使用Holo父主题从Theme.Light继承editText

bee*_*nnn 5 inheritance android android-theme

我想继承editTextandroid:Theme,而我的父母主题android:Theme.Holo.Light.
有没有"干净"的方法来做到这一点,没有将android sdk文件夹中的资源复制到我的项目中?

Ste*_*yle 12

所以我的想法是拥有一个自定义主题(实际上只是一种风格),android:Theme.Holo.Light然后覆盖EditText属性以使用父设置android:Theme.

它看起来像android:Theme.Holo.Light使用editTextStyle属性引用来更改外观EditTexts:

<item name="editTextStyle">@android:style/Widget.Holo.Light.EditText</item>
Run Code Online (Sandbox Code Playgroud)

所以你可以用editTextStylefrom 覆盖它android:Theme:

<style name="YourTheme" parent="android:Theme.Holo.Light">
    <item name="android:editTextStyle">@android:style/Widget.EditText</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后,您所要做的就是YourTheme在您的清单(或代码,如果您真的想要)中应用以获取您的自定义主题.您可能需要进一步调整内容,请查看所有库存主题:https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes. XML

编辑

我刚刚测试了这一点,并意识到它似乎android:style/Widget.EditText似乎没有应用旧版Android的背景,很可能是因为它使用了一个引用android:editTextBackground,Holo.Light设置.我只是尝试android:editTextBackground手动更改为旧版EditTextdrawable,它适用于我.

注意:只在你的styles.xml下面应用这个调整/values-v11,因为只有3.0版本可以使用android:editTextBackground,而旧版本的android已经使用了旧的EditText背景.如果app min> = API 11,则无需担心这一点.

<style name="YourTheme" parent="android:Theme.Holo.Light">
    <item name="android:editTextStyle">@android:style/Widget.EditText</item>
    <item name="android:editTextBackground">@android:drawable/edit_text</item>
</style>
Run Code Online (Sandbox Code Playgroud)