16

我有一个看起来像这样的 searchView:

private void setupSearchView() {
    mSearchView = (SearchView) getActivity().findViewById(
            R.id.search_view_neue);
    setSearchViewBackground();
    mSearchView.setOnClickListener(this);
    mSearchView.setOnQueryTextListener(this);
}




    public boolean onQueryTextSubmit(String query) {
    searchcounter = searchcounter + 1;

    setSearchViewBackground();
    ArrayList<WissensdokumenteRecord> documents = settingListContent(new ArrayList<WissensdokumenteRecord>());

    setListAdapter(new NeueWissensdokumentItemAdapter(
            inflater.getContext(), R.layout.row_example, documents));
    InputMethodManager im = (InputMethodManager) getActivity()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    im.hideSoftInputFromWindow(getActivity().getCurrentFocus()
            .getWindowToken(), 0);

    return false;
}




<SearchView
    android:id="@+id/search_view_neue"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_marginLeft="40dp"
    android:layout_marginRight="40dp"
    android:background="@drawable/border_searchview"
    android:maxWidth="540dp"
    android:queryHint="Neue Dokumente suchen" >
</SearchView>

因此,搜索视图的行为是,通过单击搜索按钮打开键盘。现在我可以搜索一些东西了。是否可以通过单击搜索视图中的任意位置进行搜索?有没有人有我的例子?

4

5 回答 5

15

我设法通过以下方式做到这一点:

在点击监听器上设置搜索视图

mSearchView.setOnClickListener(this);

捕捉 onClick 事件:

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.searchView:
            mSearchView.onActionViewExpanded();
            break;
    }
}

这样,如果您单击搜索栏上的 antwhere,就会激活键盘和搜索。

于 2014-07-24T09:54:33.013 回答
8

这将完全符合您的目标。 setIconified(false)将在 SearchView 的这一端保留十字图标,以便用户仍然可以像单击放大镜一样取消。

searchView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchView.setIconified(false);
    }
});
于 2018-02-05T23:01:14.677 回答
6

我必须建议使用setOnSearchClickListenerlistner来检测SearchView点击根据Android docs

setOnSearchClickListener

void setOnSearchClickListener(View.OnClickListener 监听器)

设置侦听器以在按下搜索按钮时进行通知。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.orders_menu, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

    if (searchView != null) {
        searchView = (SearchView) searchItem.getActionView();
        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              //perform your click operation here 
            }
        });
  return true;
}
于 2017-02-17T12:09:29.053 回答
0

我不明白为什么需要在其上设置 OnClickListener。通过单击 SearchView,您将更新文本光标。要执行搜索,您需要使用键盘 IME 操作。如果单击它将执行搜索,则无法更改光标等。在文本字段中进行除焦点/更新光标之外的其他操作通常是错误的行为。

据我记得 - 你不需要在 OnQueryTextListener 中隐藏键盘。它应该自动击中。在 OnQueryTextSubmit 中处理您的搜索

使用 Sherlock ActionBar SearchView setOnKeyListener 进行搜索

于 2013-02-13T11:07:59.747 回答
0

一个搜索小部件,它拦截对其子项的所有触摸并在触摸时执行回调:

class InterceptTouchSearchView(context: Context, attrs: AttributeSet) : SearchView(context, attrs) {

  var onActionDownIntercepted: (() -> (Unit))? = null

  override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
    return true
  }

  @SuppressLint("ClickableViewAccessibility")
  override fun onTouchEvent(ev: MotionEvent?): Boolean {
    if (ev?.action == MotionEvent.ACTION_DOWN) {
      onActionDownIntercepted?.invoke()
    }
    return false
  }
}

用法:search_view.onActionDownIntercepted = { onSearchFieldClicked() }

于 2019-03-12T16:10:30.727 回答