如何在包含多个 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。您可以使用简单的 if
和 else
语句覆盖适配器中的全局文本颜色。
希望对您有所帮助.. 编码愉快!
您可以通过在 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。
我有一个具有多个 TextView 的 LinearLayout,我只想为该布局设置默认全局颜色,而不必在每个 TextView 中添加 textColor
字段。另外,如果可能的话,是否也可以通过将颜色值添加到 TextView 中来覆盖颜色值?即,如果我将蓝色设置为默认颜色,将单个 TextView 设置为黑色,蓝色会变为黑色吗?
如果您的 TextView 确实非常多,以至于对每个调用 setTextColor()
都是一项艰巨的任务,为什么不使用支持适配器的视图(即 ListView, RecyclerView 等) .您的 TextView 的显示方式与您希望它们与 LinearLayout 一起显示的方式完全相同。
使用适配器时,您可以设置模型 TextView 布局并为所有 TextView 设置 global textColor。您可以使用简单的 if
和 else
语句覆盖适配器中的全局文本颜色。
希望对您有所帮助.. 编码愉快!
您可以通过在 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
:
<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。