动作条麦克风按钮(语音搜索)在搜索查看 [英] ActionBar Mic Button(Voice Search) in SearchView
问题描述
我在执行操作栏
。我想在搜索领域的区域操作栏搜索查看
像Flipkart应用2个按钮。
I am implementing Action Bar
. I want 2 buttons in Search field area of Action Bar SearchView
like Flipkart app.
就像上面的截图,我要2个按钮,第一个是语音搜索,另一个是吧code扫描仪,当搜索图标点击,搜索查看
的< 出现code>动作条。我能够实施动作条serahcview
与搜索图标。但我有点困惑,为什么语音搜索未出现在我的应用程序。对我的源$ C $ C一起来看看。
Like above screenshot, I want 2 buttons, first one is for Voice Search and another is for Barcode Scanner, when Search icon clicked and SearchView
of Actionbar
appears. I am able to implement actionbar serahcview
with search icon. But I am bit confused why voice search not appearing in my app. Have a look on my source code.
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);
}
}
是我从上面code有截图:
任何帮助将是非常美联社preciated。
Any help would be highly appreciated.
推荐答案
首先,你应该阅读这
AndroidManifest.xml中与搜索查看小部件的活动(singleTop是必要的,请仔细阅读上面的链接):
AndroidManifest.xml for your activity with searchview widget (singleTop is necessary, please read the link above):
<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 的这一点:
Create .../res/xml/searchable.xml with this:
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/hint"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"/>
修改onCreateOptionsMenu(最后两行是物质)
Modify onCreateOptionsMenu (last two lines are matter)
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);
}
}
在这些改变,你会看到一个搜索查看一个麦克风按钮。
After these changes you will see a mic button in a searchview.
这篇关于动作条麦克风按钮(语音搜索)在搜索查看的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!