![](/img/trans.png)
[英]widget.SearchView not showing MIC button for voice search in android
[英]ActionBar Mic Button(Voice Search) in SearchView
我正在實施Action Bar
。 我想要Action Bar SearchView
搜索字段區域中的2個按鈕,如Flipkart應用程序。
像上面的截圖一樣,我想要2個按鈕,第一個用於語音搜索,另一個用於條形碼掃描,當點擊搜索圖標並出現SearchView
of Actionbar
。 我能夠用搜索圖標實現actionbar serahcview
。 但我有點困惑為什么語音搜索沒有出現在我的應用程序中。 看看我的源代碼。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
setSearchTextColour(searchView);
setCloseSearchIcon(searchView);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_search:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void setSearchTextColour(SearchView searchView) {
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);
searchPlate.setTextColor(getResources().getColor(R.color.novoda_blue));
// searchPlate.setBackgroundResource(R.drawable.edit_text_holo_light);
searchPlate.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
}
private void setCloseSearchIcon(SearchView searchView) {
try {
Field searchField = SearchView.class.getDeclaredField("mCloseButton");
searchField.setAccessible(true);
ImageView closeBtn = (ImageView) searchField.get(searchView);
closeBtn.setImageResource(R.drawable.action_cancel);
searchField = SearchView.class.getDeclaredField("mVoiceButton");
searchField.setAccessible(true);
ImageView voiceBtn = (ImageView) searchField.get(searchView);
voiceBtn.setImageResource(R.drawable.ic_launcher);
} catch (NoSuchFieldException e) {
Log.e("SearchView", e.getMessage(), e);
} catch (IllegalAccessException e) {
Log.e("SearchView", e.getMessage(), e);
}
}
我從上面的代碼得到的截圖:
任何幫助將受到高度贊賞。
首先,你應該讀這個
使用searchview小部件進行活動的AndroidManifest.xml(必須使用singleTop,請閱讀上面的鏈接):
<activity android:name=".activities.MainActivity"
android:configChanges="orientation|screenSize"
android:launchMode="singleTop" >
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
使用以下命令創建... / res / xml / searchable.xml :
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/hint"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"/>
修改onCreateOptionsMenu(最后兩行是重要的)
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main_action_bar_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint(getResources().getString(R.string.hint));
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
}
最后覆蓋onNewIntent() :
@Override
protected void onNewIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
doSearch(query);
}
}
完成這些更改后,您將在搜索視圖中看到麥克風按鈕。
如果你沒有打電話,請檢查你的代碼:
searchView.setIconifiedByDefault(true)
通過刪除它,您應該看到“聲音”圖標。
只需將android:launchMode="singleTop"
放入Manifest的活動標簽中
<activity android:name=".Activity.MainActivity"
android:launchMode="singleTop"
>
....
<intent-filter>
<action android:name="android.intent.action.SEARCH"></action>
</intent-filter>
<meta-data android:name="android.app.default_searchable"
android:value=".Activity.MainActivity"
></meta-data>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable">
</meta-data>
</activity>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.