如何在不更改 AppTheme 中的 colorAccent 的情况下更改 TextInputLayout 和光标的浮动标签颜色

How to change the floating label color of TextInputLayout and the cursor, without changing `colorAccent` in `AppTheme`

这个问题与我将在下面特别指出的另外两个问题有关。不同之处在于,我特别要求一种无需使用基础 AppTheme.

即可更改颜色的方法

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

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

但是,它还说要专门为TextInputLayout制作一个theme/style,看起来像这样:

<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 即可。这行得通,但不一定是我 want/need.

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

但是,我没有找到此解决方案 right/satisfying。应该有一种方法可以在不改变整个应用程序风格的情况下专门改变一种颜色,提出第二个问题的人也在 his/her 条评论中批评了这一点。

所以,我在这里特别寻找的是一种解决方案,在XML中或以编程方式,专门改变颜色TextInputLabel+TextInputEditText组合的浮动hint/label和光标。基本上 与我在设置 colorAccent.

时得到的行为相同

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

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

像这样创建自定义样式:

    <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>

您可以尝试为您想要的视图设置 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

让我知道这是否适合你。否则,我会删除这个答案。

改变你想要的颜色 res/color - 和你最喜欢的颜色定义 3 颜色你可以改变效果