Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中设置视图的全局样式_Android - Fatal编程技术网

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

在Android中设置视图的全局样式,android,Android,假设我希望我的应用程序中的所有TextView实例都具有textColor=“#ffffff”。是否有一种方法可以在一个位置设置它,而不是为每个TextView设置它?有两种方法: 1.使用样式 您可以通过在res/values目录中创建XML文件来定义自己的样式。因此,假设您想要红色和粗体文本,然后创建一个包含以下内容的文件: <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyR

假设我希望我的应用程序中的所有
TextView
实例都具有
textColor=“#ffffff”
。是否有一种方法可以在一个位置设置它,而不是为每个
TextView
设置它?

有两种方法:

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>
如需进一步参考,您可以阅读本文:

2.使用自定义类 这是实现这一点的另一种可能的方法,它将提供您自己的
TextView
,将文本颜色设置为您想要的任何颜色;例如:

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

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



您是否使用一种或另一种选择取决于您的需要。如果您只想修改外观,那么最好的方法是第一种。另一方面,如果您想更改外观并为小部件添加一些新功能,第二种方法就是这样。

定义一种样式并在每个小部件上使用它,定义一个覆盖该小部件android默认设置的主题,或者定义一个字符串资源并在每个小部件中引用它,您可以为TextView(以及大多数其他内置小部件)设置默认样式,而无需执行自定义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>
<application […] android:theme="@style/MyTheme">…
您的所有文本视图都将默认为
MyTextViewStyle
中定义的样式(在本例中为粗体和红色)


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

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

<item name="android:textColorTertiary">@color/your_text_color</item>
@color/your\u text\u color
许多其他Android控件的颜色可以使用框架属性进行控制,如果使用支持库,则可以使用支持库属性


要查看您可以设置的属性列表,请查看
style.xml
themes.xml
,或者Dan Lew的这篇非常有用的文章,尝试更改每个值并查看它们在屏幕上的更改情况。

我已更新了我的问题,使其更加完整。我正在做类似的事情!!!这是迄今为止我看到的最优雅的解决方案。@Steve,如果我在style MyTheme中包含项目
@style/MyTextViewStyle
,然后将该样式应用于我的应用程序,我的所有
TextView
都将根据样式显示(甚至在操作栏中显示应用程序的名称)。如何使用操作栏解决此问题?我希望它具有默认的外观@Steve,如何在应用程序上同时应用(操作栏和小部件)主题我不确定如何将操作栏与其他东西区分开来。您可以找到设置了ActionBar样式的任何地方,然后将
@style/MyTextViewStyle
也放在那里,只需指向ActionBar默认设置(或类似设置)@StevePomeroy这对我不起作用。。你能提供一些支持吗。我的文本视图样式保持不变。是否有最少的项需要设置,或者有一些项不允许设置?最好使用自定义类,因为这是一种更简洁的方法,有助于保持xml文件的轻量级。@AmitKumar不应该!在这种特殊情况下,这意味着为每个不同的属性值使用单独的自定义类。这会产生大量膨胀的代码,并使实际布局不再可读(您必须访问每个类来查看它在做什么,而不是只读取几行xml)。只有在修改行为时才应使用自定义类,但如果唯一的更改是视图的外观,则不应使用自定义类。无法从xml设置自定义视图的样式吗?为什么我们不能在用来膨胀自定义类的
custom\u view\u layout.xml
文件中使用它呢?谢谢你,伙计!我花了很多时间弄明白为什么textColorPrimary不起作用。