如何在不更改`AppTheme`

时间:2019-06-25 15:53:07

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

这个问题与我下面将特别提到的另外两个问题有关。区别在于,我专门要求一种不使用底AppTheme即可更改颜色的方法。

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

<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的特定主题是不必要的,因为无论有没有,我都得到相同的结果。仅在colorAccent中设置AppTheme就足够了。这可行,但不一定是我想要/需要的。

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

创建这样的自定义样式:

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

编辑

这仅更改浮动标签的颜色,而不更改光标的颜色。要同时更改光标颜色,您需要创建一个drawable:

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

答案 1 :(得分:0)

您只能尝试为所需的视图设置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

让我知道这是否对您有用。否则,我将删除此答案。

答案 2 :(得分:0)

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