android自定义SearchView
来源:互联网 发布:知父莫若子by谦心诀 编辑:程序博客网 时间:2024/05/01 12:09
编写布局文件
本质就是LinearLayout包含着一个EditTextView和ImageView,ImageView显示的是一个清楚按钮,用来清除文本,然后把EditTextView的背景设置为null,再设置左边的搜索图片,给LinearLayout设置圆角背景,看起来就像EditTextView和ImageView是一个整体
search_layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:background="@drawable/search_bg" android:orientation="horizontal"> <EditText android:id="@+id/et_search" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:padding="3dp" android:imeOptions="actionSearch" android:textColor="#0e0e0e" android:textSize="18sp" android:singleLine="true" android:hint="搜索" android:textColorHint="#b0c6ce" android:gravity="center_vertical" android:drawableLeft="@drawable/search_left" android:background="@null"/> <ImageView android:id="@+id/btn_clear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" android:clickable="true" android:background="@drawable/clear" /> </LinearLayout></LinearLayout>
search_bg.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 圆角 --> <corners android:radius="5dp"/> <solid android:color="#ffffff"/> <stroke android:color="#d3dde6" android:width="1px"/></shape>
android:imeOptions=”actionSearch”这一行作用是弹出的键盘enter键是搜索字样。
自定义SearchView
public class SearchView extends LinearLayout{ public interface OnSearchListener { public void onSearch(String text); } private OnSearchListener listener; @BindView(R.id.et_search) public EditText editText; @BindView(R.id.btn_clear) public ImageView clearButton; private Context context; public SearchView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); this.context = context; LayoutInflater.from(context).inflate(R.layout.search_layout, this); ButterKnife.bind(this); initViews(); } public void setListener(OnSearchListener listener) { this.listener = listener; } private void initViews() { clearButton.setOnClickListener(v -> { editText.setText(""); clearButton.setVisibility(GONE); }); 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 (!"".equals(s.toString())) { clearButton.setVisibility(VISIBLE); }else { clearButton.setVisibility(GONE); } } @Override public void afterTextChanged(Editable s) { } }); editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { if (listener != null) { listener.onSearch(textView.getText().toString()); } hideSoftInput(context); } return true; } }); } public String getInputText() { return editText.getText().toString(); } public void hideSoftInput(Context context) { View view = ((Activity) context).getWindow().peekDecorView(); if (view != null) { InputMethodManager inputmanger = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); } }}
由于只有ViewGroup可以直接inflate,所以继承LinearLayout。设置文本监听,如果没有文本则不现实clear的ImageView,反之显示。点击clear清除文本,同时监听键盘的enter来进行搜索操作和取消软键盘显示。
0 0
- android:打造自定义searchView
- 自定义Android SearchView
- android自定义SearchView
- Android自定义SearchEditText仿SearchView
- Android 开发之自定义 SearchView
- 自定义SearchView
- 自定义SearchView
- 自定义SearchView
- 自定义 SearchView
- 自定义 Android 搜索控件 SearchView ---SimpleSearchView
- xamarin android下SearchView自定义样式
- Android自定义View——自定义搜索框(SearchView)
- Android自定义View——自定义搜索框(SearchView)
- Android自定义View——自定义搜索框(SearchView)
- Android自定义View——自定义搜索框(SearchView)
- android SearchView
- Android SearchView
- android SearchView
- MYSQL5.7以上版本 插入时出现 Err1055
- 1.mybatis入门(整个流程)
- 面试题41:和为S的两个数字
- Java中equals和==的区别
- 如何快速转载CSDN中的博客
- android自定义SearchView
- c/c++常量总结
- 面试题41-题目2:和为S的连续正数序列
- 详解es6中箭头函数
- Mac OS X 删除 MySQL
- 麻烦别人 也不要麻烦自己
- Javascript算法论道: 二分搜索(折半查找)
- 贝塞尔曲线
- 求值器和NURBS