Как установить textColor по умолчанию внутри LinearLayout, который содержит несколько TextViews?
У меня есть LinearLayout с несколькими TextViews, и я хочу установить глобальный цвет по умолчанию для этого макета только без добавления textColor
поле внутри каждого TextView. Кроме того, если это возможно, можно ли переопределить значение цвета, добавив его в TextView? т.е. если я установлю синий в качестве цвета по умолчанию и черный для одного TextView, изменится ли синий цвет на черный?
5 ответов
Чтобы установить глобальные цвета 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 на черный цвет, как показано ниже, когда первый цвет текста TextView Hint устанавливается в черный цвет. 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>
Надеюсь это поможет!
Вы можете переопределить цвета текста по умолчанию для всего приложения, установив textColorPrimary и textColorSecondary в родительском файле в styles.xml.
<!-- 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>
Довольно поздний ответ, но это помогает. Внутри
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.
Этот код будет работать, даже если вы добавите или удалите TextViews из вашего макета. Просто поместите это в свою деятельность 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.
Если ваши TextViews действительно очень много в той степени, что вызов setTextColor()
на каждом из них стояла бы непростая задача, почему бы не использовать представление, поддерживающее адаптер (например, ListView, RecyclerView и т. д.). Ваши TextViews будут отображаться точно так же, как вы планируете их отображать с LinearLayout.
При использовании адаптера вы можете настроить макет TextView модели и установить глобальный textColor для всех TextView. Вы можете переопределить этот глобальный цвет текста в своем адаптере с помощью простого if
а также else
заявления.
Я надеюсь, что это помогает.. Веселое кодирование!