任何人都可以看到为什么这不起作用..
我的SearchView位于ActionBar中并始终显示。我想知道用户何时按下搜索视图...而不是当它扩展或获得焦点时。
此代码位于onCreateOptionsMenu
中 SearchView = _searchView;
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
_searchView = (SearchView) menu.findItem(R.id.menu_finder_text_search).getActionView();
_searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
_searchView.setIconifiedByDefault(false); // Do not iconify the widget, we want to keep it open!
_searchView.setFocusable(false);
_searchView.setClickable(true);
_searchView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//DO SOMETHING!
}
});
任何?
答案 0 :(得分:5)
SearchView继承自LinearLayout,因此我们可以为每个子项设置setOnClickListener,如下所示:
public static void setSearchViewOnClickListener(View v, OnClickListener listener) {
if (v instanceof ViewGroup) {
ViewGroup group = (ViewGroup)v;
int count = group.getChildCount();
for (int i = 0; i < count; i++) {
View child = group.getChildAt(i);
if (child instanceof LinearLayout || child instanceof RelativeLayout) {
setSearchViewOnClickListener(child, listener);
}
if (child instanceof TextView) {
TextView text = (TextView)child;
text.setFocusable(false);
}
child.setOnClickListener(listener);
}
}
}
来自:http://www.trinea.cn/android/searchview-setonclicklistener-not-working/
答案 1 :(得分:1)
好吧,它没有回答它只避免它的问题。 我已经使用此链接为键盘显示时创建了一个监听器。这给了我一个恰好适合我的活动。
答案 2 :(得分:1)
试试这个:
1)绑定视图
@BindView(R.id.search) SearchView search;
2)在onCreate()中,编写以下代码。
search.setIconifiedByDefault(false);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
search.setIconified(false);
}
});
3)您的SearchView应具有以下属性。
<SearchView
android:id="@+id/search"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:background="@drawable/rounded_corners_box"
android:drawableLeft="@android:drawable/ic_menu_search"
android:imeOptions="actionSearch"
android:inputType="text"
android:maxLines="1"
android:queryHint="Search your item.."
android:textColor="@android:color/black"
android:textColorHint="@color/colorPrimary"
app:defaultQueryHint="Select locality"/>
注意:强>
android:background =“@ drawable / rounded_corners_box” - 您的自定义边框xml文件。 android:drawableLeft =“@ android:drawable / ic_menu_search” - 从可绘制文件中搜索图标。
答案 3 :(得分:1)
将Searchviews按钮绑定到自定义ImageView,然后在其中添加onClickListener
ImageView searchButton = this.searchView.findViewById(android.support.v7.appcompat.R.id.search_button);
searchButton.setOnClickListener(v -> {
// Your code here
//This is needed since you are overwriting the default click behaviour
searchView.setIconified(false);
});
答案 4 :(得分:0)
使用界面OnTouchListener
:http://developer.android.com/reference/android/view/View.OnTouchListener.html
这需要更多的实现代码,但可以对UI进行更好的控制。此解决方案假定用户将使用触摸屏与视图进行交互。
答案 5 :(得分:0)
int search_button_id = context.getResources().getIdentifier("android:id/search_button", null, null);
ImageView search_button_view = (ImageView) mSearchView.findViewById(search_button_id);
search_button_view.setOnTouchListener((view, motionEvent) -> {
mSearchView.setIconified(false);
return true;
});
答案 6 :(得分:0)
最近遇到了这个问题,找到了一个简单的解决方案。
searchView.setOnQueryTextFocusChangeListener(object : View.OnFocusChangeListener{
override fun onFocusChange(p0: View?, p1: Boolean) {
// Enter your code here
}
})
当您点击搜索字段并出现软键盘时将调用此方法。