自定义样式定义的不同Textview的不同格式

时间:2012-01-06 17:02:28

标签: android xml styles themes

我有一个问题,想弄清楚如何做到这一点: 我目前正在编写一个带有不同主题的应用程序(用户可以从不同样式列表中选择应用程序的完整外观)。 然后选择列表项我想调用setTheme(R.style.Own_App_Style0);来更改完整的外观。

最好通过一个例子解释问题: 假设我们有2个TextView。

THEME1  1. TextView:TextColor应为绿色,TextSize为15sp。  2. TextView:TextColor应为红色,TextSize为10sp。

THEME2  1. TextView:TextColor应为蓝色,TextSize为10sp。  2. TextView:TextColor应为黄色,TextSize为10sp。

当然我知道通过设置<item name="textViewStyle">@android:style/Widget.TextView</item>我可以更改TextViews的默认外观。 但是如何让我们说两种(更多)不同类型的TextView具有不同的应用样式(以及xml)?

2 个答案:

答案 0 :(得分:1)

找到一个解决方案(基本上在这个答案中setTextAppearance through code referencing custom attribute)。如果其他人有这个问题,我很快解释一下:

在style.xml中声明一个属性,并在实际样式定义中声明该属性的值(引用):

<declare-styleable name="CustomTextView">
    <attr name="mainTextView" format="reference"/>            
</declare-styleable>

<style name="appstyle0" parent="android:style/Theme.Holo.Light">
    <item name="@attr/mainTextView">@style/CustomTextViewAppearance1</item>
    <item name="android:textViewStyle">@style/CustomTextViewAppearance2</item>
</style>

<style name="appstyle1" parent="android:style/Theme.Holo.Light">
    <item name="@attr/mainTextView">@style/CustomTextViewAppearance2</item>
    <item name="android:textViewStyle">@style/CustomTextViewAppearance1</item>
</style>
<style name="CustomTextViewAppearance1">
    <item name="android:textSize">10dip</item>
</style>
<style name="CustomTextViewAppearance2">
    <item name="android:textSize">30dip</item>
</style>

现在在布局中,所有textView都像CustomTextViewAppearance2(因为这在此样式中设置为标准。并且应该使用其他样式的textViews写入定义:

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="blablabla"  
            style="?mainButtonTextView"/>

现在调用.setTheme(重启活动后)textviews开关的外观。像这种方法一样,您可以定义多种不同类型的View样式,并仅通过调用.setTheme。

在它们之间切换

答案 1 :(得分:0)

不幸的是,样式一旦定义就是静态的。要以编程方式修改整个样式级联,您必须更改样式本身的定义。相反,您所能做的就是更改分配给TextView(或任何可样式对象)的样式,如我在上面的评论中链接到的问题中所述。