我的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是不可能的,因此请更改代码。
答案 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无法做到。无论如何,您需要更改代码。