如何在包含多个 TextView 的 LinearLayout 中设置默认的 textColor?

How do you set a default textColor inside a LinearLayout that contains multiple TextViews?

我有一个具有多个 TextView 的 LinearLayout,我只想为该布局设置默认全局颜色,而不必在每个 TextView 中添加 textColor 字段。另外,如果可能的话,是否也可以通过将颜色值添加到 TextView 中来覆盖颜色值?即,如果我将蓝色设置为默认颜色,将单个 TextView 设置为黑色,蓝色会变为黑色吗?

如果您的 TextView 确实非常多,以至于对每个调用 setTextColor() 都是一项艰巨的任务,为什么不使用支持适配器的视图(即 ListView, RecyclerView 等) .您的 TextView 的显示方式与您希望它们与 LinearLayout 一起显示的方式完全相同。

使用适配器时,您可以设置模型 TextView 布局并为所有 TextView 设置 global textColor。您可以使用简单的 ifelse 语句覆盖适配器中的全局文本颜色。

希望对您有所帮助.. 编码愉快!

您可以通过在 styles.xml

的父项中设置 textColorPrimary 和 textColorSecondary 来覆盖整个应用程序的默认文本颜色

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="textColorPrimary">@color/black</item>
    <item name="textColorSecondary">@color/grey</item>
</style>

要设置默认的全局 TextView 颜色,首先您可以在 AndroidManifest.xml 文件中为以下项目创建自己的主题:

  • textColorPrimary - 对于大文本
  • textColorSecondary - 对于中型文本
  • textColorTertiary - 对于小文本
  • textColorHint - 提示文本

例如,在AndroidManifest.xml中:

<style name="TextViewTheme" parent="android:Widget.TextView">
    <!-- Set the default global color for TextViews to Holo Blue Dark -->
    <item name="android:textColorPrimary">@android:color/holo_blue_dark</item>
    <item name="android:textColorSecondary">@android:color/holo_blue_dark</item>
    <item name="android:textColorTertiary">@android:color/holo_blue_dark</item>
    <item name="android:textColorHint">@android:color/holo_blue_dark</item>
</style>

接下来,在您的 LinearLayout 上设置主题样式。您还可以将单个 TextView 的默认值覆盖为黑色,如下所示,在 activity_main.xml:

中将第一个 TextView 提示文本颜色设置为黑色
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:theme="@style/TextViewTheme">

    <TextView
        android:id="@+id/phone_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/phone_tv"
        android:textColor="@android:color/black"
        android:textColorHint="@android:color/black" />

     <TextView
        android:id="@+id/email_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/email_tv" />

</LinearLayout>

希望对您有所帮助!

即使您在布局中添加或删除 TextView,此代码也能正常工作。只需将其放入您的 activity 的 onCreate();

    LinearLayout layout = (LinearLayout)findViewById(R.id.layout);

    for (int i = 0; i < layout.getChildCount(); i++) {
        View v = layout.getChildAt(i);
        if (v instanceof TextView) {
            ((TextView) v).setTextColor(Color.BLACK);
        } 
    }

将颜色更改为您喜欢的颜色。
如果你想在这段代码之后,你可以改变任何特定 TextView 的颜色。

很晚才回答,但这确实有效。 style.xml 内最近更改为 themes.xml

<style name="ErrorStyle">
        <item name="android:textColor">#FF0000</item>
</style>

然后在您的 xml 布局中

<LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:theme="@style/ErrorStyle">

 .. All of your TextView
</LinearLayout>

使用这种方法,我们可以使用其他 xml 变体,例如夜间模式等......我们仍然有可能覆盖内部 TextView。