我想继承editText
fromandroid:Theme
而我的父主题是android:Theme.Holo.Light
.
除了将 android sdk 文件夹中的资源复制到我的项目中之外,是否有任何“干净”的方法可以做到这一点?
2 回答
所以我的想法是有一个从 扩展的自定义主题(实际上只是一种样式),android:Theme.Holo.Light
然后覆盖EditText
属性以使用来自 的父设置android:Theme
。
看起来像android:Theme.Holo.Light
使用editTextStyle
属性引用来更改的外观EditTexts
:
<item name="editTextStyle">@android:style/Widget.Holo.Light.EditText</item>
所以你可以用editTextStyle
from覆盖它android:Theme
:
<style name="YourTheme" parent="android:Theme.Holo.Light">
<item name="android:editTextStyle">@android:style/Widget.EditText</item>
</style>
然后,您所要做的就是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
手动更改为旧版EditText
可绘制对象,它对我有用。
styles.xml
注意:只在你的under上应用这个调整/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>
是的,您创建了一个 styles.xml 并将样式父级设置为您想要的任何内容。:-)
如何定义样式的示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00FF00</item>
<item name="android:typeface">monospace</item>
</style>
</resources>
像这样使用这种风格:
<TextView
style="@style/CodeFont"
android:text="@string/hello" />
在此处阅读更多信息:
http://developer.android.com/guide/topics/ui/themes.html#DefiningStyles