首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android中设置视图的全局样式

在Android中设置视图的全局样式
EN

Stack Overflow用户
提问于 2010-06-20 11:07:55
回答 4查看 97.9K关注 0票数 136

比方说,我希望应用程序中的所有TextView实例都有textColor="#ffffff"。有没有一种方法可以在一个地方设置,而不是为每个TextView设置

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-02 23:01:15

实际上,您可以为TextViews (和大多数其他内置小部件)设置默认样式,而无需创建自定义java类或单独设置样式。

如果您查看Android源代码中的themes.xml,您将看到各种小部件的默认样式的一组属性。关键是textViewStyle (或editTextStyle等)属性,您可以在自定义主题中覆盖该属性。您可以通过以下方式覆盖这些设置:

创建styles.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme">
    <item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>

<style name="MyTextViewStyle" parent="android:Widget.TextView">
    <item name="android:textColor">#F00</item>
    <item name="android:textStyle">bold</item>
</style>
</resources>

然后,只需将该主题应用于AndroidManifest.xml中的应用程序

代码语言:javascript
复制
<application […] android:theme="@style/MyTheme">…

所有的文本视图都将默认使用MyTextViewStyle中定义的样式(在本例中为粗体和红色)!

这在API level 4以上的设备上进行了测试,似乎效果很好。

票数 272
EN

Stack Overflow用户

发布于 2010-06-20 11:34:47

有两种方法可以实现此目的:

1.使用样式

您可以通过在res/values目录上创建XML文件来定义您自己的样式。因此,假设您希望使用红色和粗体文本,然后创建一个包含以下内容的文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyRedTheme" parent="android:Theme.Light">
    <item name="android:textAppearance">@style/MyRedTextAppearance</item>
  </style>
  <style name="MyRedTextAppearance" parent="@android:style/TextAppearance">
    <item name="android:textColor">#F00</item>
    <item name="android:textStyle">bold</item>
  </style>
</resources>

你可以随心所欲地命名,例如res/values/red.xml。然后,您唯一需要做的就是在您想要的小部件中使用该视图,例如:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    style="@style/MyRedTheme"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="This is red, isn't it?"
    />
</LinearLayout>

有关更多参考信息,请阅读本文:Understanding Android Themes and Styles

2.使用自定义类

这是实现此目的的另一种可能方法,它将提供您自己的TextView,它始终将文本颜色设置为您想要的颜色;例如:

代码语言:javascript
复制
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.TextView;
public class RedTextView extends TextView{
    public RedTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setTextColor(Color.RED);
    }
}

然后,您只需将其视为XML文件中的普通TextView

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<org.example.RedTextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="This is red, isn't it?"
    />
</LinearLayout>

您是否使用一个或另一个选择取决于您的需求。如果您唯一想做的就是修改外观,那么最好的方法是第一种。另一方面,如果您想要更改外观并向小部件添加一些新功能,则可以使用第二种方法。

票数 53
EN

Stack Overflow用户

发布于 2015-11-21 10:09:22

对于TextView中的默认文本颜色,请将主题中的android:textColorTertiary设置为所需的颜色:

代码语言:javascript
复制
<item name="android:textColorTertiary">@color/your_text_color</item>

许多其他Android控件的颜色可以使用框架属性来控制,或者如果您使用支持库,则支持库属性。

要查看可以设置的属性列表,请查看styles.xmlthemes.xmlAndroid source code,或者Dan Lew的这个非常有用的gist,尝试更改每个值并查看它们在屏幕上发生了什么变化。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3078081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档