设置edittext以显示搜索按钮
1、布局中设置属性:inputType、imeOptions
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:imeOptions="actionSearch" />
2、代买监听点击搜索按钮
EditText editText = findViewById(R.id.editText);
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// 在这里执行搜索操作或其他相关操作
performSearch();
return true;
}
return false;
}
});
// 搜索操作的示例方法
private void performSearch() {
String searchText = editText.getText().toString();
// 执行搜索操作
// ...
}
设置EditText清空按钮
要显示 EditText 的清空按钮,您可以使用 EditText 的 setCompoundDrawables()
方法来设置清空按钮的图标,并使用 setOnTouchListener()
和 OnTouchListener
接口来处理清空按钮的点击事件
EditText editText = findViewById(R.id.editText);
// 设置清空按钮图标
editText.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.ic_clear, 0);
// 处理清空按钮点击事件
editText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int DRAWABLE_RIGHT = 2;
if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getRawX() >= (editText.getRight() - editText.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
// 清空文本
editText.setText("");
return true;
}
}
return false;
}
});
上述示例代码中,我们首先使用 setCompoundDrawablesRelativeWithIntrinsicBounds()
方法来设置清空按钮的图标。这里使用的是 ic_clear
图标,您可以替换为您自己的图标资源。
然后,我们使用 setOnTouchListener()
方法来为 EditText 设置触摸监听器。在触摸事件中,我们检查用户是否点击了清空按钮的区域(即右侧的 drawable 区域)。如果是,则清空文本内容。
通过以上步骤,您可以在 EditText 中显示清空按钮,并在用户点击清空按钮时清空文本内容。请根据您的具体需求进行适当的调整和修改
解决EditText与父View点击冲突问题
需求
- 当
EditText
可输入时,其父View
不可点击 - 当
EditText
不可输入时,其父View
可点击
实现
java版本:
public class ClickableEditText extends android.support.v7.widget.AppCompatEditText {
public ClickableEditText(Context context) {
super(context);
}
public ClickableEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ClickableEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isEnabled())
return false;
return super.onTouchEvent(event);
}
}
kotlin版本
class ClickableEditText(context: Context, attrs: AttributeSet?) :
AppCompatEditText(context, attrs) {
override fun onTouchEvent(event: MotionEvent?): Boolean {
if (!isEnabled) {
return false
}
return super.onTouchEvent(event)
}
}
使用方法
EditText editText;
//父View可点击
editText.setEnable(false);
//父View不可点击
editText.setEnable(true);