Java Android如何在用户单击工具栏时打开searchview

Java Android如何在用户单击工具栏时打开searchview,java,android,searchview,Java,Android,Searchview,我想在用户单击工具栏时打开searchview。我该怎么做 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_items,menu); MenuItem item = menu.findItem(R.id.action_search); searchView = (SearchView) item.getActionView

我想在用户单击工具栏时打开searchview。我该怎么做

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.toolbar_items,menu);
    MenuItem item = menu.findItem(R.id.action_search);
    searchView = (SearchView) item.getActionView();
    ((EditText) searchView.findViewById(R.id.search_src_text)).setHintTextColor(getResources().getColor(R.color.searchHint));
    searchView.setOnQueryTextListener(this);
    return super.onCreateOptionsMenu(menu);
}

为句柄单击重写此方法

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()){
                case android.R.id.search:
                    openSearch();
                    return false;
            }
    
            return super.onOptionsItemSelected(item);
    }

将collapseActionView值添加到app:showAsAction属性,以确保菜单项使用指定的可折叠操作视图

在Menu.xml中添加此

app:actionViewClass=“android.support.v7.widget.SearchView”

然后呢

MenuItem searchItem=menu.findItem(R.id.action\u search); SearchView SearchView=(SearchView)searchItem.getActionView()

大宗报价


所以基本上,我在我这边实现了整个过程,并且它正在工作。记住,小部件应该来自AndroidX

主要活动

class MainActivity : AppCompatActivity() {
    private var searchView: SearchView? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById<Button>(R.id.btnClickListener).setOnClickListener {
            searchView?.onActionViewExpanded()
        }
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.search, menu)
        searchView = (menu.findItem(R.id.search).actionView as SearchView)
        return true
    }
}
class MainActivity:AppCompatActivity(){
私有变量searchView:searchView?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById(R.id.btnClickListener).setOnClickListener{
searchView?.onActionViewExpanded()
}
}
重写创建选项菜单(菜单:菜单):布尔值{
菜单充气器。充气(R.menu.search,menu)
searchView=(menu.findItem(R.id.search).actionView作为searchView)
返回真值
}
}
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnClickListener"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

菜单资源

<?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/search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always" />
</menu>

单击按钮,它将展开搜索视图。
您可以用自己的单击侦听器替换它。

它应该会自动打开。你能分享你的菜单项吗?当我点击搜索按钮时,它正在打开,这个按钮被定义为工具栏中的项目。但是我想在单击工具栏时打开它。在工具栏上单击listener set searchView.SetIconnified(false),这样它将展开搜索视图。@Abdul它不工作,工具栏单击listener正在触发?你能核实一下吗?谢谢你的回答,但我对此没有问题。我想在用户单击工具栏时打开searchview。
<?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/search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always" />
</menu>