首页 > 解决方案 > Kotlin Android 搜索菜单项在活动开始时聚焦

问题描述

问题:如何在活动开始时使搜索菜单项具有焦点?我希望活动从第二张图片开始,如下所示。

这里有我的代码:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_search_qpon)
    setSupportActionBar(qponSearch_toolbar)
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    // Inflate the menu to use in the action bar
    menuInflater.inflate(R.menu.search_menu, menu)

    val searchItem = menu.findItem(R.id.app_bar_search)

    if (searchItem!=null) {
        val searchView = searchItem.actionView as SearchView

        val searchHint = getString(R.string.searchHint)
        searchView.setQueryHint(searchHint)

        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String?): Boolean {
                return false
            }

            override fun onQueryTextChange(newText: String?): Boolean {
                if (newText!!.toString().isNotEmpty()) {

                    startRecyclerView(generateData(newText))
                    companyList.clear()
                }
                else {
                    startRecyclerView(generateData(newText))
                    companyList.clear()
                }
                return false
            }
        })
    }

    return super.onCreateOptionsMenu(menu)
}

这里有xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/bg"
    android:orientation="vertical"
    tools:context=".SearchQponActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/qponSearch_toolbar"
        android:layout_width="match_parent"
        app:title=""
        android:layout_height="56dp"
        android:background="@color/white50"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/qponSearch_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </android.support.v7.widget.RecyclerView>

</LinearLayout>

这里有 MENU 文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >


    <item
        android:id="@+id/app_bar_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />


</menu>

第一张图片,这是现在活动开始时显示的内容: 在此处输入图像描述

第二张图片,然后我点击搜索按钮,它显示: 在此处输入图像描述

标签: androidbuttonsearchkotlin

解决方案


您必须在expandActionView()方法searchItem内调用onCreateOptionsMenu()方法。检查下面给出的代码:

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.test_menu, menu)
    val searchItem = menu?.findItem(R.id.app_bar_search)
    searchItem?.expandActionView() // This line will expand the search view.
    ....
}

此外,您必须更改菜单布局 XML 文件。您必须将 showAsAction 的属性从 更改alwaysifRoom|collapseActionView。检查下面给出的代码。

<item
    android:id="@+id/app_bar_search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="Search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="ifRoom|collapseActionView" />

推荐阅读