如何根据 EditText length() 测试更改默认的 ImageView 颜色?
How can I change default ImageView color based on EditText length() test?
我有一个默认为白色的图标,使用 ImageView 和可绘制对象。我希望颜色在按下时变为黑色。当 EditText 行获得文本时(因为用户在行中输入了一些数据),我希望图标变为灰色。目前,当长度测试 >0 时图标变为黑色,按下图标时没有任何变化(因为颜色已经是黑色)。然后当长度测试变为 == 0 时,颜色保持黑色,而它应该恢复为默认颜色白色。我在这里错过了什么?
Activity 文件:
protected void OnCreate...
fEditText = (EditText) findViewById(R.id.FEditText);
@Override
public void afterTextChanged(Editable s) {
fTextInputLayout.setHint("Due Date");
if (fEditText.getText().length() > 0) {
imgcan = (ImageView) findViewById(R.id.imageView1);
imgcan.setImageResource(R.drawable.ic_delete_54per24);
<!-- "ic_delete_54per24 is the the gray icon drawable -->
}
}
Xml 布局文件:
...
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="onClickClearDate"
android:clickable="true"
android:src="@drawable/trash_can" />
trash_can 可绘制文件:
...
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/ic_delete_black_24dp" />
<!-- black color when pressed -->
<item android:drawable="@drawable/ic_delete_white_24dp" />
<!-- white color when normal (default) -->
可能你错过了当文本为空时重置彩色图像,像这样:
if (fEditText.getText().length() > 0) {
imgcan = (ImageView) findViewById(R.id.imageView1);
imgcan.setImageResource(R.drawable.ic_delete_54per24);
}else{ //add this
imgcan = (ImageView) findViewById(R.id.imageView1);
imgcan.setImageResource(R.drawabale.ic_delete_white_24dp);
}
试用 Textwatcher ?
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(TextUtils.isEmpty(s)){
imageView.setImageResource(R.drawable.ic_delete_54per24);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
我有一个默认为白色的图标,使用 ImageView 和可绘制对象。我希望颜色在按下时变为黑色。当 EditText 行获得文本时(因为用户在行中输入了一些数据),我希望图标变为灰色。目前,当长度测试 >0 时图标变为黑色,按下图标时没有任何变化(因为颜色已经是黑色)。然后当长度测试变为 == 0 时,颜色保持黑色,而它应该恢复为默认颜色白色。我在这里错过了什么?
Activity 文件:
protected void OnCreate...
fEditText = (EditText) findViewById(R.id.FEditText);
@Override
public void afterTextChanged(Editable s) {
fTextInputLayout.setHint("Due Date");
if (fEditText.getText().length() > 0) {
imgcan = (ImageView) findViewById(R.id.imageView1);
imgcan.setImageResource(R.drawable.ic_delete_54per24);
<!-- "ic_delete_54per24 is the the gray icon drawable -->
}
}
Xml 布局文件:
...
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="onClickClearDate"
android:clickable="true"
android:src="@drawable/trash_can" />
trash_can 可绘制文件:
...
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/ic_delete_black_24dp" />
<!-- black color when pressed -->
<item android:drawable="@drawable/ic_delete_white_24dp" />
<!-- white color when normal (default) -->
可能你错过了当文本为空时重置彩色图像,像这样:
if (fEditText.getText().length() > 0) {
imgcan = (ImageView) findViewById(R.id.imageView1);
imgcan.setImageResource(R.drawable.ic_delete_54per24);
}else{ //add this
imgcan = (ImageView) findViewById(R.id.imageView1);
imgcan.setImageResource(R.drawabale.ic_delete_white_24dp);
}
试用 Textwatcher ?
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(TextUtils.isEmpty(s)){
imageView.setImageResource(R.drawable.ic_delete_54per24);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});