Android SearchView在键入时不显示文本

Android SearchView在键入时不显示文本,android,toolbar,searchview,Android,Toolbar,Searchview,我意识到,SearchView就像谷歌说的: 在res/xml中创建searchable.xml: <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="Search" android:voiceS

我意识到,
SearchView
就像谷歌说的:

res/xml
中创建
searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="Search"
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" />
更改我的
AndroidManifest

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable" />
</activity>
因此,我有以下几点:

点击搜索图标后,我看到:

当我开始打字时,它不会显示,也不会显示“清除”图标和麦克风图标。但是我在
searchable.xml
中添加了它们

谢谢你的任何想法或代码

添加:原因可能是工具栏样式

添加2:工具栏,但我不认为这是必要的

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        local:theme="@style/AppTheme" />

据我猜测,您的
搜索视图工作得很好,但它的图标不可见,文本颜色为白色。因此,我想告诉您如何更改
搜索视图的图标和文本颜色

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.second_activity_menu, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    // Set text colour 
    SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchAutoComplete.setHintTextColor(Color.WHITE);
    searchAutoComplete.setTextColor(Color.WHITE);

    View searchplate = (View)searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
    searchplate.setBackgroundResource(R.drawable.texfield_searchview_holo_light);
    // Clear search or close icon
    ImageView searchCloseIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
    searchCloseIcon.setImageResource(R.drawable.clear_search);

    // Voice icon
    ImageView voiceIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_voice_btn);
    voiceIcon.setImageResource(R.drawable.abc_ic_voice_search);

    // Search icon
    ImageView searchIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
    searchIcon.setImageResource(R.drawable.abc_ic_search);

    return super.onCreateOptionsMenu(menu);
}

您很难从xml自定义
SearchView
。因此,请遵循编程解决方案

给工具栏任何明确的
布局高度

<android.support.v7.widget.Toolbar
    ...
    android:layout_height="?attr/actionBarSize"
    ...
/>

并投票以重复方式结束此问题。

情况可能并非如此,但在我的案例中,有其他视图在单击搜索图标后立即将焦点从SearchView中移除,这给了我与第二张图像相同的结果

 override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.activity_main, menu)
    val searchItem = menu.findItem(R.id.action_search)
    val searchView = searchItem.actionView as? SearchView
    searchView?.setOnFocusChangeListener { _, _ ->
        // My ScrollView was requesting focus
    }
    return true
}
奇怪的是,这打开了一个完美工作的虚拟键盘——有输入反馈声音和所有东西——但所有用它输入的东西都没有显示在屏幕上的任何地方。即使是
searchView.setOnQueryTextListener()
也不会被输入触发,这意味着键入的文本会变得无效,根本不被使用


使用
searchView.requestFocus()
在完成所有视图的焦点后,对我来说都很有效。

我也遇到了同样的问题,我的解决方案是设置

searchView.setMaxWidth(Integer.MAX_VALUE);

你检查颜色了吗?你检查文本颜色了吗?它可能是白色的。您需要将文本颜色更改为黑色。@ReazMurshed没有help@BasilBattikhi换成黑色。没有help@AlexBoyko试试我的答案,请让我知道这是否有帮助。也许工具栏有问题?也许我应该使用不同的风格或使用ActionBar。我不知道有什么问题。你也可以改变工具栏的颜色,看看会发生什么。这个想法是把对比度改成黑色。然后我输入文本,在SearchView中什么也没有发生。而且也没有语音图标
 override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.activity_main, menu)
    val searchItem = menu.findItem(R.id.action_search)
    val searchView = searchItem.actionView as? SearchView
    searchView?.setOnFocusChangeListener { _, _ ->
        // My ScrollView was requesting focus
    }
    return true
}
searchView.setMaxWidth(Integer.MAX_VALUE);
    searchView.setOnTouchListener { v, event ->
        if (event.action == MotionEvent.ACTION_UP){
            searchView.isIconified = false
        }
        false
    }

    searchView.setOnClickListener {
        searchView.isIconified = false
    }