无法在Android中应用主题和样式

时间:2011-10-24 22:09:21

标签: android themes styles

我一直在寻找解决方案几个小时:如何将简单的主题或样式应用于应用程序,活动或视图?这似乎非常容易,但我的风格总是被忽略。

以下是style.xml中的代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="master" parent ="@android:style/Theme.NoTitleBar">
        <item name="android:typeface">serif</item>
        <item name="android:textColor">#8b8378</item>
    </style>
</resources>

这是AndroidManifest.xml中的代码:

<application android:icon="@drawable/icon" 
        android:label="@string/app_name"
        android:theme="@style/master">

和ListView中的代码

<ListView android:layout_height="wrap_content" 
style="@style/master"
android:id="@+id/list" 
android:layout_width="fill_parent">
</ListView>

没有发生过。字体样式,颜色都是默认值。只有明确声明属性

<TextView android:gravity="center" android:typeface="serif" android:textColor="#8b7d6b" android:textAppearance="?android:attr/textAppearanceSmall" android:id="@+id/text_intro" android:layout_height="wrap_content" android:text="@string/welcome_text" android:layout_width="wrap_content" android:padding="20sp" android:layout_weight="0"></TextView>

会奏效。我知道eclipse不支持主题和样式的预览,但它们也不适用于模拟器。

请帮忙!我不敢相信我已经被这个小问题困住了一个星期......提前谢谢你!

1 个答案:

答案 0 :(得分:1)

这里有一些关于Android风格和资源的事情。

Android样式是一种非常通用的工具,结果是某些配置可能但无效且将被忽略。你碰到了一些。 :)

应用于视图时,样式将等效于在该视图上设置相同的属性。 样式不会级联到子视图。 typefacetextColor在ListView上无效,因此会被忽略。他们也不会以这种方式处理主题,因为主题为不同类型的视图提供默认样式。 (为什么静默忽略无效属性而不是生成错误?因为在以后的平台版本中添加了新属性,旧设备应该忽略他们不知道如何解析兼容性的额外属性。)

完成你想要做的事情的最好方法可能是:

  • 为TextViews创建样式。 (这不应该是像粘贴代码那样的主题的父级。)
  • 使用style=语法将该样式应用于列表项布局中的TextView。