5

我想继承editTextfromandroid:Theme而我的父主题是android:Theme.Holo.Light.
除了将 android sdk 文件夹中的资源复制到我的项目中之外,是否有任何“干净”的方法可以做到这一点?

4

2 回答 2

12

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

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

<item name="editTextStyle">@android:style/Widget.Holo.Light.EditText</item>

所以你可以用editTextStylefrom覆盖它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>
于 2013-06-27T15:17:17.173 回答
0

是的,您创建了一个 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

于 2013-06-27T14:59:29.110 回答