当设置android.support.v7.widget.SearchView的属性为app:iconifiedByDefault="false"是SearchView是不可以关闭的,即setOnCloseListener方法触发不了,但是我又要实现当它点击清空按钮时清除输入框中的内容,并且清除搜索结果显示默认的数据。这时候就向调用setOnCloseListener方法,但是方法不能生效。
mSearchView = view.findViewById(R.id.searchview);
mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
return false;
}
});
于是想起来SearchView去除搜索框中取出下划线的方法,发现是找到里面的空间然后重新设置属性,于是想既然可以找到下划线空间,那肯定也可以找到关闭SearchView的图片按钮看了一下SearchView的源码
mSearchSrcTextView = findViewById(R.id.search_src_text);
mSearchSrcTextView.setSearchView(this);
mSearchEditFrame = findViewById(R.id.search_edit_frame);
mSearchPlate = findViewById(R.id.search_plate);
mSubmitArea = findViewById(R.id.submit_area);
mSearchButton = findViewById(R.id.search_button);
mGoButton = findViewById(R.id.search_go_btn);
mCloseButton = findViewById(R.id.search_close_btn);
mVoiceButton = findViewById(R.id.search_voice_btn);
mCollapsedIcon = findViewById(R.id.search_mag_icon);
mCloseButton 就是目标,于是这样写
if (mSearchView == null) {
return;
} else {
//获取TextView
final TextView textView = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
//设置字体大小为14sp
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
//设置提示文字颜色
textView.setHintTextColor(Color.parseColor("#c2c2c2"));
//去掉SearchView的下划线
View viewById = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
if (viewById != null) {
viewById.setBackgroundColor(Color.TRANSPARENT);
}
//监听关闭按钮点击事件
ImageView mCloseButton = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
if (mCloseButton.isClickable()) {
mCloseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//清除搜索框并加载默认数据
mSearchView.clearFocus();
textView.setText(null);
Searched = false;
searchCoin = null;
onRefresh();
}
});
}
}