android - Kotlin Android 搜索菜单项在 Activity 开始时聚焦

标签 android button search kotlin

问题:如何让搜索菜单项在activity启动时获得焦点? 我希望 Activity 从第二张图片开始,如下所示。

这里是我的代码:

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>

第一张图片,这是 Activity 开始时显示的内容: enter image description here

第二张图片,然后我点击搜索按钮,它显示: enter image description here

最佳答案

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

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 的属性从 always 更改为 ifRoom|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" />

关于android - Kotlin Android 搜索菜单项在 Activity 开始时聚焦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51230421/

相关文章:

search - 如果在 Elasticsearch 中选择数组字段的另一个聚合选项,如何计算将添加的文档数

android - 使用 Android 搜索对话框搜索多个数据库列

android - 使用 wifi 验证智能手机(iOS、Android)

java - 将多个表/列放入 CSV 文件

android - Adobe Air 在 iOS 上可以正常运行吗?

android蜂窝菜单按钮目标

windows - 在 Windows 中创建菜单按钮

c# - 向 RESTful WCF 服务发送发布请求

vb.net - 根据光标所在位置将文本添加到文本框

c# - 如何在每个目录或子目录中找到包含特定字符串的最新文件?