【问题标题】:How to change the floating label color of TextInputLayout and the cursor, without changing `colorAccent` in `AppTheme`如何更改 TextInputLayout 和光标的浮动标签颜色,而不更改 `AppTheme` 中的 `colorAccent`
【发布时间】:2019-06-26 01:01:51
【问题描述】:

这个问题与我将在下面具体提及的另外两个问题相关。不同之处在于,我特别要求一种不使用基础AppTheme 来更改颜色的方法。

first related question中,建议的解决方案包括设置

<item name="colorAccent">@color/Color Name</item> in AppTheme

不过,它还说要专门为TextInputLayout 制作一个主题/样式,如下所示:

<style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/Color Name</item> 
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/Color Name</item>
    <item name="colorControlNormal">@color/Color Name</item>
    <item name="colorControlActivated">@color/Color Name</item>
</style>

所以colorAccent被设置了两次。我尝试了这个并得出结论,TextInputLayout 的特定主题是不必要的,因为我得到了相同的结果,无论有没有它。仅在AppTheme 中设置colorAccent 就足够了。这可行,但不一定是我想要/需要的。

second related question 中,人们建议再次修改AppTheme 并设置colorAccent(和其他属性)。

但是,我认为这个解决方案并不正确/令人满意。应该有一种方法可以在不改变整个应用程序的样式的情况下专门更改一种颜色,提出第二个问题的人也在他/她的一个 cmets 中批评了这一点。

所以,我在这里特别寻找,是一种解决方案,在 XML 中或以编程方式,专门更改浮动提示/标签和光标的颜色 TextInputLabel+TextInputEditText 组合。基本上我在设置colorAccent时会得到相同的行为

有没有办法做到这一点,或者 SDK 开发人员是否认真地通过设置 colorAccent 才能做到这一点?

PS 我意识到这可能适用于创建一个新主题,从 AppTheme 继承并将其设置为我想要具有特定颜色的活动。但是,正如我所说,这不是我想要的。

【问题讨论】:

    标签: android android-textinputlayout android-textinputedittext android-color


    【解决方案1】:

    像这样创建自定义样式:

        <style name="myInputText">
         <item name="android:textColor">@color/myColor</item>
         <item name="android:textSize">@dimen/text_size</item>
         ...
         </style>
    

    现在,您可以直接在TextInputLayout 中使用它,无需提供任何父样式或更改您的应用主题。

    <android.support.design.widget.TextInputLayout
        android:textColorHint="@color/myColor" 
        app:hintTextAppearance="@style/myInputText"
        android:layout_width="match_parent"
        android:layout_height="50dp">
    

    编辑

    这只会改变浮动标签的颜色,而不是光标。要同时更改光标颜色,您需要创建一个可绘制对象:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <size android:height="10dp"
              android:width="2dp"/>
        <solid android:color="@color/myColor"/>
    </shape>
    

    并将其添加到您用于TextInputEditText 的样式中,不是TextInputLayout

    <style name="Settings.TextInputEditText">
        ...
        <item name="android:textCursorDrawable">@drawable/cursor</item>
    </style>
    

    【讨论】:

    • 当我尝试在样式中设置android:hintTextAppearance时,根本无法解决。当我只在样式中设置hintTextAppearance 或直接在TextInputLayout 中设置时,文本会失去所有颜色并且变得非常小。此外,设置textColorHint 只会更改提示的颜色,而焦点不在TextInputEditText 上。一旦获得焦点,浮动文本再次变为标准绿色。
    • 我已经编辑了答案。我之前不知何故搞砸了。如果这不起作用,请告诉我。
    【解决方案2】:

    在 res/color 中更改您想要的颜色 - 并将您最喜欢的颜色定义为可以更改效果的 3 种颜色

    【讨论】:

    • 对不起,我真的不明白你想说什么
    • 打开颜色换色看看效果 - prntscr.com/o8wx91
    • 我明白你的意思。但是,在我的问题中,我明确表示这不是我想要的方式。感谢您的尝试。
    【解决方案3】:

    您可以尝试将colorAccent 设置为您想要的视图,仅...类似于:

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:theme="@style/AppThemeInputLayout" />
    

    然后,在styles.xml

    <style name="AppThemeInputLayout" parent="AppTheme">
        <item name="colorAccent">#FF0000</item>
    </style>
    

    我想这样你可以只为特定视图更改colorAccent(而不是整个应用程序)

    让我知道这是否适合您。否则,我将删除此答案。

    【讨论】:

    • 正如我在上一句中所说的,我意识到我可以做到这一点。但是,这是一个非常不令人满意的解决方法,而不是直接的方法。我要找的是&lt;item name="floatingLabelColor"&gt;#F00&lt;/item&gt;
    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 2021-08-25
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多