在焦点上更改Edittext线条颜色

时间:2017-04-07 19:02:40

标签: android colors android-edittext

我一直在尝试在焦点上更改edittext的基线颜色,但它似乎不起作用..

这是我的.xml片段:

<android.support.design.widget.TextInputLayout
                android:id="@+id/til_passwordWrapper"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="@dimen/dimen_10"
                android:paddingLeft="@dimen/dimen_10"
                android:paddingRight="@dimen/dimen_10"
                android:hint="@string/hint_login_password"
               >
                <android.support.v7.widget.AppCompatEditText
                    android:id="@+id/password"
                    android:textSize="17sp"
                    android:fontFamily="sans-serif"
                    android:textColor="#000000"
                    android:textCursorDrawable="#000000"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textPassword"
                    app:backgroundTint="#000000"
                    android:maxLines="1"
                    />
            </android.support.design.widget.TextInputLayout>

这是我的styles-v21文件:

<style name="AppTheme" parent="AppTheme.Base">
    <item name="colorPrimary">@color/ColorPrimary</item>
    <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
    <item name="colorAccent">@color/ColorPrimary</item>
</style>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowEnterTransition">@android:transition/slide_bottom</item>
    <item name="android:windowExitTransition">@android:transition/slide_bottom</item>
    <item name="android:windowAllowEnterTransitionOverlap">true</item>
    <item name="android:windowAllowReturnTransitionOverlap">true</item>
    <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
    <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
</style>

其中: - ColorPrimary =#CD060C(红色) - ColorPrimaryDark =#8B181B(深红色)

我在Lollipop设备上进行了测试,效果很好。我不能对我的Marshamallow设备说同样的话。我在S.O上看了一下这个问题,看看M和以上设备如何解决这个问题。有人提出了一种方法,包括在我的活动类中添加这几行代码:

passwordWrapper.getEditText().setOnFocusChangeListener(new View.OnFocusChangeListener(){
        @Override
        public void onFocusChange(View v, boolean hasFocus){
            if (hasFocus)
            {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                    v.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.ColorBlackTransparent)));
                }
            }
        }
    });

在我的Marshmallow设备上,每当我专注于编辑文本时,我都会继续使用渐变色,即基线的红色......我希望它是黑色的..

有没有人在此问题上有解决方法?感谢

1 个答案:

答案 0 :(得分:1)

首先,您不需要使用setOnFocusChangeListener更改TextInputLayout的下划线颜色

有针对它的android项属性,当edittext被激活时会改变颜色。

在基本主题中添加此属性:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
     <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">#000000</item>  //black color
    <item name="colorControlHighlight">#000000</item>
</style>

确保在活动中使用主题:Manifest

<activity android:name=".YourActivity"
        android:theme="@style/AppTheme.Base"/>

修改

设置colorControlHighlight会影响导航抽屉选定的项目颜色。所以使用:

res / drawable / drawer.xml中的

<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@color/colorPrimary" android:state_checked="true" />
        <item android:drawable="@android:color/transparent" />
</selector>

现在在导航视图中将背景设置为:

app:itemBackground="@drawable/drawer"