首页 > 解决方案 > 如何在不更改“AppTheme”中的“colorAccent”的情况下更改TextInputLayout和光标的浮动标签颜色

问题描述

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

在第一个相关问题中,建议的解决方案包括设置

<item name="colorAccent">@color/Color Name</item>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是,不需要特定主题,因为我得到了相同的结果,无论有没有它。仅设置colorAccentinAppTheme就足够了。这可行,但不一定是我想要/需要的。

第二个相关问题中,人们建议再次修改AppThemeand 设置colorAccent(和其他属性)。

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

所以,我在这里特别寻找的是一种解决方案,用 XML 或以编程方式,专门更改+ Combo的浮动提示/标签和光标的颜色。基本上与设置时相同的行为TextInputLabelTextInputEditTextcolorAccent

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

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

标签: androidandroid-textinputlayoutandroid-textinputedittextandroid-color

解决方案


创建一个像这样的自定义样式:

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

推荐阅读