SearchView无法获取焦点

6
编辑 对于任何想知道的人,我的问题是我使用了android.widget.SearchView而不是android.support.v7.widget.SearchView。希望这能帮助有同样问题的其他人! 原始帖子 我正在尝试按照官方指南在Android ActionBar中实现SearchView:http://developer.android.com/training/search/setup.html 在找不到问题的情况下,最终我将应用程式简化为最基本的Hello World应用程序,并惊讶地发现该错误仍然存在于最小的应用程序中!
以下是错误: 搜索图标出现在菜单栏中,没有问题。当我点击它时,搜索栏扩展(如预期),但没有光标,也没有软键盘出现。(我想发布图片,但我的声誉太低 :(
以下是相关代码,尽管我只是创建了一个新的Android应用程序并将项目添加到menu/menu_main.xml中。 MainActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

menu_main.xml

<item android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="@android:string/search_go"
    app:showAsAction="collapseActionView|ifRoom"
    app:actionViewClass="android.widget.SearchView" />

你应该回答并接受自己的问题,并使用你在编辑中提供的详细信息作为正确的解决方案。 - HBG
1
谢谢!你指引了我正确的方向,只是现在我们应该使用androidx:androidx.appcompat.widget.SearchView - Loudenvier
2个回答

2

使用这个menu.xml文件

<menu 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"
    tools:context="your activity context here"><item
    android:id="@+id/mi_search"
    android:title="@string/search"
    android:orderInCategory="2"
    android:icon="@drawable/searchicon"
    app:showAsAction="collapseActionView|ifRoom"
    app:actionViewClass="android.support.v7.widget.SearchView" />

onCreateOptionsMenu(Menu menu)中,需要添加以下代码:

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);

    MenuItem searchItem = menu.findItem(R.id.mi_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);

    searchView.setOnQueryTextListener(this);

    return super.onCreateOptionsMenu(menu);
}

onOptionsItemSelected() 方法中:

case R.id.mi_search:
    onSearchRequested();
    break;

1
哇,唯一的诀窍是将 app:actionViewClass="android.support.v7.widget.SearchView" 改为 app:actionViewClass="android.widget.SearchView" 你的答案给了正确方向的提示,如果你能帮我进行编辑,我会标记你的回答为正确解决方案 :) - P Chan

1

在2022年,这个问题仍然存在,但如果你使用androidx(应该使用),答案必须更新。

菜单项必须使用androidx.appcompat.widget.SearchView而不是android.widget.SearchViewandroid.support.v7.widget.SearchView

<item android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="@android:string/search_go"
    app:showAsAction="collapseActionView|ifRoom"
    app:actionViewClass="androidx.appcompat.widget.SearchView" />

onCreateOptionsMenu方法的重写也必须更新以使用androidx类。以下是相应的Kotlin代码:

override fun onCreateOptionsMenu(menu: Menu): Boolean { 
    menuInflater.inflate(R.menu.main, menu)
    val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        menu.findItem(R.id.search).actionView as androidx.appcompat.widget.SearchView).apply {
        setSearchableInfo(searchManager.getSearchableInfo(componentName))
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接