自定义样式定义的不同文本视图的不同格式



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

这个问题最好用一个例子来解释:假设我们有2个文本视图。

主题11.文本视图:文本颜色应为绿色,文本大小应为15sp。2.文本视图:文本颜色应为红色,文本大小为10sp。

主题21.文本视图:文本颜色应为蓝色,文本大小为10sp。2.文本视图:文本颜色应为黄色,文本大小应为10sp。

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

找到了一个解决方案(基本上在这个答案中通过引用自定义属性的代码设置TextAppearance)。如果其他人有这个问题,我很快解释:

在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>

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

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

当您现在调用.setTheme(在重新启动活动之后)时,textviews的外观会切换。与此方法类似,您可以定义尽可能多的不同类型的视图样式,并仅通过调用.setTheme.来在它们之间切换

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

相关内容

  • 没有找到相关文章

最新更新