4

任何人都可以看到为什么这不起作用..

SearchView的在ActionBar并且总是显示。我想知道用户何时按下searchview...而不是何时扩展或获得焦点。

此代码位于 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!
    }
});

任何人?

4

7 回答 7

8

SearchView 继承自 LinearLayout,所以我们可以为每个孩子设置 OnClickListener,像这样:

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/

于 2014-01-22T03:41:55.480 回答
1

好的,它没有回答它只是避免它的问题。我已使用此链接为显示键盘时创建一个侦听器。这给了我一个适合我的时间的活动。

https://stackoverflow.com/a/7423586/1312937

于 2013-02-26T17:23:30.637 回答
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" -- 从可绘制文件中搜索图标。

于 2016-10-27T08:59:48.253 回答
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);
}); 
于 2018-08-30T14:06:05.553 回答
0

使用界面OnTouchListener:http: //developer.android.com/reference/android/view/View.OnTouchListener.html

这需要更多的实现代码,但可以更好地控制 UI。此解决方案假定用户将使用触摸屏与视图交互。

于 2013-02-26T15:01:38.437 回答
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;
});
于 2019-05-24T00:44:35.393 回答
0

最近卡在这个问题上,找到了一个简单的解决方案。

searchView.setOnQueryTextFocusChangeListener(object : View.OnFocusChangeListener{
        override fun onFocusChange(p0: View?, p1: Boolean) {
            // Enter your code here
        }
    })

当您点击搜索字段并出现软键盘时,将调用此方法。

于 2021-04-24T18:26:59.050 回答