【问题标题】:Is it possible to expand SearchView without showing the keyboard是否可以在不显示键盘的情况下展开 SearchView
【发布时间】:2015-08-01 19:01:16
【问题描述】:

我在操作栏中有 SearchView。当用户单击它时它会展开,然后出现键盘。这是预期的行为。但是,在我的应用中,有一种情况是我以编程方式展开 SearchView。

MenuItem searchMenuItem = menu.findItem(R.id.action_search);
MenuItemCompat.expandActionView(searchMenuItem);

我不想在这种情况下显示键盘。我以编程方式展开 SearchView 只是为了向用户显示最后一个搜索查询是什么。

那么是否可以在不显示键盘的情况下打开搜索视图?

【问题讨论】:

  • 您找到解决方案了吗?
  • @gersonmendes,我没有找到解决方案。但是,如果我不得不再次使用 SearchView,我会在 Google 上搜索 Play 商店中使用的详细视图。它比通常的 SearchView 要好得多。 androidcentral.com/sites/androidcentral.com/files/styles/…

标签: android keyboard searchview


【解决方案1】:

我用这个解决了我的问题:

@Override
    public void onPrepareOptionsMenu(Menu menu) {
        final SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menu_search));
        if(!TextUtils.isEmpty(mSearch)){
            searchView.setQuery(mSearch, false);
            searchView.setIconified(false);
            searchView.clearFocus();
        }
    }

如果此代码解决了您的问题,请告诉我。

【讨论】:

  • 明确答案:searchView.setIconified(false);searchView.clearFocus(); 的组合
【解决方案2】:

我已经解决了这个问题。请重写以下代码的方法--

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    MenuItem menuItem = menu.findItem(R.id.menu_search);

    searchView = ((SearchView) menuItem.getActionView());

    searchView.setFocusable(true);
    searchView.setIconified(false);
    searchView.requestFocusFromTouch();
    menuItem.setVisible(true);

}

【讨论】:

    【解决方案3】:

    我使用以下代码在不打开键盘的情况下展开搜索视图:

    searchView.setFocusable(false);
    searchView.setIconified(false);
    searchView.clearFocus();
    

    希望这对某人有所帮助。

    【讨论】:

      【解决方案4】:

      在我的应用中,我希望 SearchView 满足这些要求:

      1. SearchView默认展开,用户不能折叠
      2. 键盘不会自动出现,只有当用户点击 SearchView 时才会出现

      我设法得到了预期的结果。

      activity_search.xml

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
      
          <androidx.appcompat.widget.Toolbar
              android:id="@+id/toolbar"
              android:layout_width="match_parent"
              android:layout_height="?attr/actionBarSize"
              android:background="#ffffff"
              android:elevation="8dp"
              app:contentInsetStartWithNavigation="0dp">
      
              <androidx.appcompat.widget.SearchView
                  android:id="@+id/search_view"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:focusable="false"
                  app:iconifiedByDefault="false"
                  app:queryBackground="@android:color/transparent"
                  app:queryHint="Search..." />
      
          </androidx.appcompat.widget.Toolbar>
      
      </LinearLayout>
      

      SearchActivity.kt

      class SearchActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
      
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_search)
              setSupportActionBar(toolbar)
              supportActionBar!!.setDisplayHomeAsUpEnabled(true)
              search_view.setOnQueryTextListener(this)
          }
      
          override fun onQueryTextChange(newText: String?): Boolean {
              // Perform search either here or in onQueryTextSubmit()
              return true
          }
      
          override fun onQueryTextSubmit(query: String?): Boolean {
              // Clear focus here to avoid situation where in order to exit the activity you have to click Back twice
              // This happens if you click "Search" button on your keyboard and then want to exit the activity.
              // First Back click clears SearchView focus while the second click exits the activity.
              // You don't want to click twice, do you?
              search_view.clearFocus()
              return false
          }
      
          override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
              android.R.id.home -> { onBackPressed(); true }
              else -> super.onOptionsItemSelected(item)
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-22
        • 2017-08-04
        • 2021-11-17
        • 2020-03-23
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多