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
}