[英]Android SearchView not showing text when typing
我意識到SearchView
就像Google所說的那樣:
在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>
並實現了我的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
添加了它們。
感謝您的任何想法或代碼。
添加:也許是因為工具欄樣式?
添加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" />
據我所知,您的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
。 因此,請遵循編程的解決方案。
可能並非如此,但是在我的情況下,還有其他一些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()
對我searchView.requestFocus()
。
我遇到了同樣的問題,我的解決方案是設置
searchView.setMaxWidth(Integer.MAX_VALUE);
searchView.setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_UP){
searchView.isIconified = false
}
false
}
searchView.setOnClickListener {
searchView.isIconified = false
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.