输入文字时如何更改EditText背景颜色?

时间:2017-11-16 11:36:02

标签: android android-edittext android-selector

我的EditText有一些颜色,但是当我输入一些文字时,它应该会改变。说它是灰色的,我开始进入,它是黄色的。此EditText也是重点,因此当此活动开始时 - 我已经可以输入文本了。我是怎么试的:

<style name="LoginEnterField">
    <item name="android:textColorHint">@color/black</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:background">@drawable/selector_edittext</item>
    <item name="android:textSize">@dimen/general_text_size</item>
    <item name="android:paddingLeft">@dimen/activity_inner_horizontal_margin</item>
    <item name="android:paddingRight">@dimen/activity_inner_horizontal_margin</item>
</style>

<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">
    <solid android:color="@color/grey"/>
    <corners android:radius="5dp" />

</shape>

<shape xmlns:android="http://schemas.android.com/apk/res/android"

  android:shape="rectangle">
  <solid android:color="@color/yellow"/>
  <corners android:radius="5dp" />

</shape>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="true" android:drawable="@drawable/roundbox_active_style"/>
  <item android:drawable="@drawable/roundbox_inactive_style" />
</selector>

我认为重点在于这个选择器。我的EditText会改变颜色,但它总是变黄。如果我输入一些文字,怎么让它变成黄色? 我无法进行任何代码更改!这很重要。我无法仅添加或更改xml文件。

编辑:仅使用xml是不可能的,因此请更改代码。

5 个答案:

答案 0 :(得分:5)

尝试使用 addTextChangedListener

  

addTextChangedListener(TextWatcher watcher)

     

只要此editText文本发生更改,就会将TextWatcher添加到调用其方法的列表中。

editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if (!editText.getText().toString().trim().isEmpty()) {
                    editText.setBackgroundColor(ContextCompat.getColor(Main2Activity.this, R.color.colorPrimary));
                } else {
                    editText.setBackgroundColor(ContextCompat.getColor(Main2Activity.this, R.color.colorPrimaryDark));
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

答案 1 :(得分:2)

使用TextWatcher

当一个类型的对象附加到Editable时,将在更改文本时调用其方法。

  

onTextChanged (CharSequence s,int start,int before,int count) -   调用此方法是为了在s内通知您计数   从开头开始的字符刚刚替换了旧文本   之前的长度。

  public void onTextChanged(CharSequence s, int start, int before, int count) {
                // Your Code // call .setBackgroundColor method here


    }

答案 2 :(得分:0)

使用 TextWatcher

editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
  

您可以使用任何适合您的方法添加所需的代码。如需进一步参考,请访问:

https://developer.android.com/reference/android/text/TextWatcher.html

答案 3 :(得分:0)

使用 addTextChangedListener

 public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if (!editText.getText().toString().trim().isEmpty()) {
                    editText.setBackgroundColor(Your New Color);
                } else {
                    editText.setBackgroundColor(Your Old Color);
                }
            }

答案 4 :(得分:0)

仅从xml无法做到。无论如何,您需要更改代码。