Как установить 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 заявления.

Я надеюсь, что это помогает.. Веселое кодирование!

Другие вопросы по тегам