Android SearchView在输入时不显示文字

时间:2016-08-30 09:34:37

标签: android toolbar searchview

我意识到SearchView就像Google所说:

searchable.xml中创建了res/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" />

res/menu/second_activity_menu中创建的菜单项:

<item
    android:id="@+id/second_toolbar_search"
    android:icon="@mipmap/ic_search_black_24dp"
    android:orderInCategory="100"
    android:title="@string/search"
    app:showAsAction="collapseActionView|ifRoom"
    app:actionViewClass="android.support.v7.widget.SearchView" />

更改我的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>

并实现了我的SecondActivity类扩展AppCompatActivity

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

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.second_toolbar_search).getActionView();

    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);
    return true;
}

结果我有了这个:

Toolbar

在搜索图标上刻后我有这个:

SearchView

当我开始输入内容时,它没有显示,也没有显示“清除”图标和麦克风图标。但是我在searchable.xml添加了它们。

感谢任何想法或代码。

ADD:也许原因是工具栏样式?

添加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" />

5 个答案:

答案 0 :(得分:3)

为工具栏添加任何明确的layout_height

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

P.S。我找到了这个答案here,并投票决定将此问题视为重复。

答案 1 :(得分:0)

据我所知,你的SearchView完美无缺,但由于图标和文字颜色是白色,因此不可见。所以我想告诉你如何更改SearchView的图标和文字颜色。

@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。因此,请遵循编程的解决方案。

答案 2 :(得分:0)

可能不是这种情况,但是就我而言,还有其他View在单击搜索图标后立即将焦点从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()对我有用。

答案 3 :(得分:0)

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

_http.get

答案 4 :(得分:0)

    searchView.setOnTouchListener { v, event ->
        if (event.action == MotionEvent.ACTION_UP){
            searchView.isIconified = false
        }
        false
    }

    searchView.setOnClickListener {
        searchView.isIconified = false
    }