如何在Android中为视图设置全局样式?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

假设我希望TextView我应用中的所有实例都具有textColor="#ffffff"。有没有办法在一个地方设置它,而不是为每个设置TextView

提问于
用户回答回答于

实际上,你可以为TextViews(以及大多数其他内置小部件)设置默认样式,而无需执行自定义Java类或单独设置样式在Android源代码中查看,您会看到各种小部件默认样式的一些属性。关键是您在自定义主题中覆盖的textViewStyle(或editTextStyle等)属性。您可以通过以下方式覆盖它们:

创建一个styles.xml

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

<application […] android:theme="@style/MyTheme">…

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

用户回答回答于

有两种方法可以这样做:

1.使用样式

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

<?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。然后,你唯一需要做的就是在你想要的小部件中使用该视图,例如:

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

2.使用自定义类

这是实现这一目标的另一种可能方式,它将提供你自己的TextView设置文字颜色始终为你想要的任何; 例如:

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);
    }
}

然后,你只需TextView在XML文件中将其视为正常就可以了:

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

无论你使用一种还是另一种选择取决于您的需求。如果你想要做的唯一事情是修改外观,那么最好的方法是第一个。另一方面,如果你想改变外观并为你的小部件添加一些新的功能,那么第二种方法就是要走的路。

扫码关注云+社区