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

时间:2018-08-13 15:14:56

标签: android android-layout android-text-color

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

4 个答案:

答案 0 :(得分:2)

要设置默认的全局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 Hint文本颜色设置为黑色的情况:

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

希望这会有所帮助!

答案 1 :(得分:1)

您可以通过在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>

答案 2 :(得分:0)

如果您的TextView确实很多,以至于在每个TextView上调用setTextColor()都是一项艰巨的任务,那么为什么不使用支持适配器的视图(即ListView,{{3 }}等)。您的TextView的显示方式与您希望它们与LinearLayout出现的方式完全相同。

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

我希望这会有所帮助。.编码愉快!

答案 3 :(得分:0)

即使您从布局中添加或删除TextView,此代码也将起作用。只需将其放入您活动的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的颜色。