2011-10-24 26 views
0

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

这里是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中的代码:在ListView

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

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

和代码没有发生过任何事情。字体样式,颜色全部保持默认。只有声明属性明确像

<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

这里有一些关于Android样式和资源的事情。

Android样式是一个非常普遍的设施,结果是一些配置是可能的,但无效,将被忽略。你碰到过几个。 :)

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

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

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

谢谢!你回答了这个问题。我添加字体的原因是因为我想在整个应用程序中更改字体。除了在每种可能的风格中陈述字体外,是否有任何方便的方法来实现它? – um88hao

+0

您可以在主题中为某种类型的小部件设置默认样式。这些属性通常遵循'android:widgetClassNameStyle'的命名约定。您可以将'android:textViewStyle'设置为您的自定义TextView样式,以将其应用为默认值。 – adamp

相关问题