我意识到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" />
已在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>
并实现了扩展AppCompatActivity
的SecondActivity
类
@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;
}
因此,我得到了以下结果:
点击搜索图标后,我会看到以下内容:
当我开始输入一些东西时,它不显示,也不显示“清除”图标和麦克风图标。但我在searchable.xml
中添加了它们。
感谢您的任何想法或代码。
ADD:也许是因为工具栏的风格吧?
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" />
发布于 2016-09-01 22:43:37
为工具栏提供任何显式的layout_height
<android.support.v7.widget.Toolbar
...
android:layout_height="?attr/actionBarSize"
...
/>
附注:我找到了这个答案here,并投票决定结束这个重复的问题。
发布于 2016-08-30 18:24:53
据我所知,你有你的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
。因此,请遵循程序化的解决方案。
发布于 2018-06-20 06:49:11
情况可能不是这样,但在我的例子中,在单击搜索图标后,有一些其他视图正在从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()
对我来说很有效。
https://stackoverflow.com/questions/39223853
复制相似问题