我在一个购物项目中工作,我想在EditText中创建动态的结束图标,当用户专注于EditText时,该图标会发生变化。
因此,基本上,在用户与editText交互之前,该图标在右侧显示“搜索”图标,而当用户单击并输入一些信息时,该图标将显示“清除”图标。
我仅实现了可绘制对象的可见功能。
edtSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b)
{
if(b){
edtSearch.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0);
edtSearch.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.ic_cancel_black_24dp,0);
}
}
});
糟糕!如何处理搜索EditText的取消单击?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要处理EditText中动态显示搜索和清除图标的逻辑,您需要在获取焦点时显示清除图标,并在失去焦点或文本为空时恢复为搜索图标。同时,您还需要为清除图标添加点击监听器以清空EditText内容。以下是一个示例实现:
// 初始化一个点击监听器用于清除EditText内容
final View.OnTouchListener clearIconTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
edtSearch.setText(""); // 清空EditText
edtSearch.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_search_black_24dp, 0); // 切换回搜索图标
}
return true;
}
};
edtSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
// 当获得焦点且有文本时,显示清除图标并设置点击监听
if (!edtSearch.getText().toString().isEmpty()) {
edtSearch.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_cancel_black_24dp, 0);
edtSearch.setCompoundDrawableTintList(ColorStateList.valueOf(ContextCompat.getColor(context, android.R.color.black))); // 如果需要改变颜色
edtSearch.setOnTouchListener(clearIconTouchListener);
} else {
// 如果没有文本,则保持或显示搜索图标
edtSearch.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_search_black_24dp, 0);
}
} else {
// 失去焦点时,根据EditText是否有文本决定是否切换回搜索图标
if (edtSearch.getText().toString().isEmpty()) {
edtSearch.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_search_black_24dp, 0);
}
edtSearch.setOnTouchListener(null); // 移除触摸监听避免误触
}
}
});
这段代码首先定义了一个触摸监听器clearIconTouchListener
,当用户点击清除图标时,它会清空EditText并切换回搜索图标。然后,在onFocusChange
方法中,我们根据EditText是否获得焦点以及其内容是否为空来决定显示哪个图标,并在适当的时候应用这个触摸监听器。这样就实现了您所描述的功能。