【问题标题】:Android, How to theme font colour for just TextView Widgets?Android,如何为 TextView 小部件设置主题字体颜色?
【发布时间】:2013-04-12 22:37:39
【问题描述】:

我刚刚在我的主题中应用了黑色背景图片

<style name="AppBaseTheme" parent="Theme.Sherlock.Light">
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:windowBackground">@drawable/background</item>
</style>

现在我希望将我的文本视图的颜色更改为白色,以便它们在深色背景下可见

我认为为 TextView 设置 android:textColor 会起到这样的作用

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:windowBackground">@drawable/background</item>
    <item name="android:textViewStyle">@style/Ff1TextViewStyle</item>
</style>


<style name="Ff1SpinnerViewStyle" parent="android:Widget.TextView">
    <item name="android:textColor">@color/sysWhite</item>
    <item name="android:textStyle">bold</item>
</style>

但令我沮丧的是,这完全塞满了各种东西,例如微调器文本和微调器下拉文本,通过将文本更改为白色背景上的白色来操作操作栏下拉菜单,所有这些我以前都非常满意,而且我现在确保我尚未使用或尚未发现的其他控件很可能以白色文本结束。

我很难相信 android 主题如此混乱,以至于我无法自信地设置 TextView 小部件的文本颜色而不影响小部件,我只能假设是 TextView 小部件的子级,所以我在想应该归咎于我缺乏知识,我希望并寻求对必须是共同要求的启蒙。

任何帮助表示赞赏。

【问题讨论】:

    标签: android android-theme


    【解决方案1】:

    我不确定您是否可以仅为TextView 设置样式,因为ActionbarSpinner 和其他Views 也包含TextView 作为他们的孩子,所以它也会影响他们你会发现。在我看来,您应该创建一种样式并将其设置为您的TextView。类似的东西:

     <style name="MyTextView" parent="@android:style/TextAppearance.Small">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">@android:color/white</item>
        <item name="android:textSize">12sp</item>
    </style>
    

    并在您的 TextView 的 xml 声明中使用它:

    <TextView
       style="@style/MyTextView" />
    

    或者您可以做的第二件事是创建您的自定义TextView

    public class MyTextView extends TextView {
    
         public MyTextView(Context context){
             super(context);
             this.setTextColor(android.R.color.white);
         }
    }
    

    并在您的 xml 文件中使用 MyTextView :

    <com.my.package.name.MyTextView
       android:id="@+id/my_textview" />
    

    编辑:

    设置 android:textViewStyle 会影响所有其他视图的原因是,如果您仔细查看 android 源代码,您会发现其他视图中使用的每个 textview 样式都是 android.Widget.TextView 的子级。所以在我看来,在这种情况下你能做的最好的事情是创建一个单一的样式并将其设置为你的 TextView 在 xml 中。

    希望这些信息对您有所帮助!

    【讨论】:

    • 自定义 TextView 小部件似乎是目前最好的方法。谢谢。
    • 感谢您的解决方案,此解决方案将为我节省大量代码重复在个别 TextView 小部件中
    【解决方案2】:

    您可以创建一个样式并将其仅应用于TextViews 中的特定元素,例如在您的布局 xml 文件中:

    <TextView
        style="@style/Ff1SpinnerViewStyle"
        android:id="@+id/myView" />
    

    您可以将标准主题应用到您的 Activity,只有您在布局文件中覆盖样式的元素的外观才会改变。

    您无需使用任何 TextView 特定属性覆盖 AppBaseTheme

    【讨论】:

    • 是的,谢谢,但我有 50 多个 TextViews 并且还在增长,所以我想使用一个主题
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2012-11-14
    • 2012-09-13
    • 1970-01-01
    • 2011-04-09
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多