【问题标题】:textColor override textColorPrimary and textColorPrimaryDarktextColor 覆盖 textColorPrimary 和 textColorPrimaryDark
【发布时间】:2019-04-16 01:57:57
【问题描述】:

我已将主题应用于我的应用程序,但是当我使用 textColor 属性时,它会覆盖所有其他属性,例如 textColorPrimary。

<style name="AppTheme" parent="Base.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="android:windowBackground">@color/windowBackground</item>
    <item name="android:textColorPrimary">#FF4081</item>
    <item name="android:textColorSecondary">#186925</item>

    <item name="colorControlActivated">#FF0000</item> <!-- for check box when checked -->
    <item name="colorControlNormal">#bbc40c</item> <!-- for check box when normal -->
    <item name="colorButtonNormal">#325289</item>
    <!--<item name="android:textColor">#084fe9</item>-->
    <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>

    <!--<item name="android:windowActivityTransitions">true</item>
    <item name="android:windowEnterTransition">@android:transition/slide_right</item>
    <item name="android:windowExitTransition">@android:transition/slide_left</item>-->
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>
<style name="HeaderText" parent="@android:style/TextAppearance.Large">
    <item name="android:textColor">#ffffffff</item>
    <item name="android:textSize">12dp</item>
</style>
<style name="WindowAnimationTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>

我的布局文件

 <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/questionNumberTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/scoreTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="17dp"
        android:layout_marginEnd="16dp"
        android:text="Score : 20"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/iconIv"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintEnd_toStartOf="@+id/scoreTv"
        app:layout_constraintStart_toEndOf="@+id/questionNumberTv"
        app:layout_constraintTop_toTopOf="parent"
        tools:srcCompat="@tools:sample/avatars[11]" />

    <TextView
        android:id="@+id/questionTitle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="8dp"
        android:text="TextView"
        android:textAlignment="center"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/iconIv" />

    <Button
        android:id="@+id/fiftyfiftyBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/radioGroup2" />

    <RadioGroup
        android:id="@+id/radioGroup2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/questionTitle">

        <RadioButton
            android:id="@+id/option1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/option2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/option3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/option4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="RadioButton" />
    </RadioGroup>

    <TextView
        android:id="@+id/votesTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="10dp"
        android:drawableLeft="@drawable/ic_expand_less_green_24dp"
        android:text="20"
        android:textSize="16sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/fiftyfiftyBtn" />

    <TextView
        android:id="@+id/commentCountTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:drawableLeft="@drawable/ic_expand_less_green_24dp"
        android:text="35"
        android:textSize="16sp"
        app:layout_constraintStart_toEndOf="@+id/votesTv"
        app:layout_constraintTop_toBottomOf="@+id/fiftyfiftyBtn" />

</android.support.constraint.ConstraintLayout>

当我取消注释 android:textColor 时,android:textColorPrimary 颜色被 android:textColor 覆盖。我希望我的标题/大文本使用 textColorPrimary 并且对于中小型我想使用 textColorPrimaryDark 如他们的文档中所述。

在此之前,按钮文本颜色由 textColorPrimary 设置。

我如何为整个应用使用两个文本配色方案。使用 textColorPrimary 和 textColorPrimaryDark。

或者我必须创建两个textStyle 并将它们设置为每个View。有没有更好的方法来实现我想要的。

【问题讨论】:

    标签: android styles material-design android-5.0-lollipop android-theme


    【解决方案1】:

    您需要定义两种样式并在其中设置所需的属性。它更清晰易读易懂。在 textview 中设置自己的样式也是很好的行为。

    这是一个你应该做的示例:

    <style name="textStyle1" parent="android:TextAppearance">
                <item name="android:textColor">@color/textColorPrimary</item>
                <item name="android:textStyle">bold</item>
                <item name="android:textAppearance">?android:attr/textAppearanceLarge</item>
                <item name="android:gravity">start</item>
                <item name="android:textSize">22sp</item>
            </style>
    
            <style name="textStyle2" parent="android:TextAppearance">
                <item name="android:textColor">@color/textColorPrimaryDark</item>
                <item name="android:textStyle">normal</item>
                <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
                <item name="android:gravity">start</item>
                <item name="android:textSize">18sp</item>
            </style>
    

    然后在您期望的文本视图上使用这种样式,如下所示:

    <TextView
                android:id="@+id/tv_name"
                style="@style/textStyleMedium"
               ........ />
    

    删除应用主题上的以下标签:

    <item name="android:textColorPrimary">#FF4081</item>
            <item name="android:textColorSecondary">#186925</item>
            <!-- <item name="android:textColor">#084fe9</item> -->
    

    不同颜色的用途:

    TextColor 只是为任何给定视图的文本设置颜色的 xml 属性。

    TextColorPrimary 是启用按钮和大文本视图的默认文本颜色。

    TextColorSecondary 是 Medium 和 Small Textviews 的默认文本颜色。

    colorPrimaryDark 是状态栏的颜色。

    为了实现这一点,您应该删除覆盖其他颜色的textColor

    android:textAppearance="@style/TextAppearance.AppCompat.Medium" 
    

    在 xml 中的 textView 中。然后它会将其应用于您的所有视图。通过这种方式,您不必将样式设置为 all ..

    【讨论】:

    • 那么textColorPrimary和textColorPrimaryDark的目的是什么??
    • 这是我在我的问题中提到的。所以我的标题是一个更大的。如何将其设置为 large 。我的意思是我的问题标题如何根据 textColorPrimary 或 textColorPrimaryDark 变化??
    • 请您尝试一下具体定义 textAppearance:android:textAppearance="?android:attr/textAppearanceSmall" 或 android:textAppearance="?android:attr/textAppearanceMedium" 谢谢。不知道能不能用,希望能解决问题
    • 我说在什么阶段(在什么 sp/dp)操作系统决定它是 textApperanceLarge 或 textApperanceSmall 。我使用了不同大小的 textView 但没有一个采用 textColorPrimary 或 Dark 的 textColor
    猜你喜欢
    • 2015-12-02
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2019-12-18
    • 2012-07-18
    • 2015-02-08
    相关资源
    最近更新 更多