我有一个带有多个TextView的LinearLayout,并且只想为该布局设置默认的全局颜色,而不必在每个TextView内添加一个textColor
字段。另外,如果可能的话,是否还可以通过将其添加到TextView中来覆盖颜色值?即,如果我将蓝色设置为默认颜色,将单个TextView设置为黑色,则蓝色会变为黑色吗?
答案 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 。您可以使用简单的if
和else
语句在适配器中覆盖此全局文本颜色。
我希望这会有所帮助。.编码愉快!
答案 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的颜色。