Android EditText在获得焦点时更改背景颜色

6

我在我的应用程序中使用了编辑文本,并且当焦点在编辑文本上时,我想要更改背景。我写了一些代码,但是我遇到了一个问题。我需要在编辑文本上点击两次才能显示键盘。

这是我的代码:

  private View.OnFocusChangeListener myEditTextFocus =  new View.OnFocusChangeListener() {
    public void onFocusChange(View view, boolean hasfocus) {
        if (hasfocus) {
            ((EditText) view).setBackgroundResource(R.drawable.edittext_input_background_focus);

            ((EditText) view).setTextColor(Color.parseColor("#4d4d4d"));

        }
        else {
            ((EditText) view).setBackgroundResource(R.drawable.edittext_input_background_not_focus);

        }
    };
};

这段代码有问题,因为我注释掉之后一切都完美了。我的代码有什么问题?还是有其他的解决方法?

你在drawable中尝试过<selector>吗? - Chirag Savsani
不,我不知道如何使用它。我想在焦点中更改文本颜色和背景。@ChiragSavsani Savsani - donoachua
3个回答

21

//跟随此代码

将这3个可绘制文件放入res/drawable文件夹中

simple_edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="rectangle" >

    <solid android:color="#FFFFFF" />

    <stroke
        android:width="3dp"
        android:color="#FB9820" />

    <corners
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp" />

</shape>

focus_edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="rectangle" >
    <solid android:color="#58ACFA" />

    <stroke
        android:width="3dp"
        android:color="#FB9820" />
    <corners
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp" />
</shape>

selector_edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/focus_edittext"/>
    <item android:drawable="@drawable/simple_edittext" />
</selector>

然后像这样使用这些可绘制对象:

 <EditText
        android:id="@+id/layout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginBottom="10dp"
        android:background="@drawable/selector_edittext"
        android:text="@string/hello_world" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/layout1"
        android:padding="10dp"
        android:background="@drawable/selector_edittext"
        android:text="@string/hello_world" />

4

你可以使用状态:

android:state_window_focused="true" 

在bg.xml可绘制文件中:
    <item android:state_window_focused="true" android:state_focused="true">
        <shape>
            <solid android:color="@color/colorWhite"/>
            <stroke
                android:width="1dp"
                android:color="@color/colorPrimary" />
            <corners
                android:radius="55dp" />

        </shape>
    </item>

    <item >
        <shape>
            <solid android:color="@color/colorWhite"/>

            <stroke
                android:width="1dp"
                android:color="@color/colorGrey2" />
            <corners
                android:radius="55dp" />
        </shape>
    </item>


</selector>

编辑文本后会呈现如下效果:

<EditText
    android:layout_width="match_parent"
    android:layout_height="41dp"
    android:layout_margin="50dp"
    android:layout_marginTop="50dp"
    android:background="@drawable/bg" />

0

轻松使用android:textColorHighlight="@color/your_color_name"属性,该属性属于androidx.appcompat.widget.AppCompatEditText


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接