我意识到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;
}
结果我有了这个:
在搜索图标上刻后我有这个:
当我开始输入内容时,它没有显示,也没有显示“清除”图标和麦克风图标。但是我在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" />
答案 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
}