我在名为activity_products_final
的布局文件中有一个seachview
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:queryHint="Search..">
</android.support.v7.widget.SearchView>
</LinearLayout>
的活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_products_final);
searchView = (android.support.v7.widget.SearchView) findViewById(R.id.searchView);
searchView.setIconified(false);
searchView.onActionViewExpanded();
searchView.clearFocus();
searchView.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (adapter != null)
filterData(query);
return false;
}
@Override
public boolean onQueryTextChange(String query) {
if (adapter != null)
filterData(query);
return false;
}
});
ImageView closeButton = (ImageView) searchView.findViewById(R.id.search_close_btn);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setQuery("", false);
searchView.clearFocus();
//collapseAll();
}
});
}
清单文件
<activity
android:name=".ActivityProductList"
android:configChanges="orientation|screenSize"
android:label="@string/title_activity_products"
android:launchMode="singleTop"
android:parentActivityName=".ActivityStartShopping"
android:screenOrientation="portrait"
>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
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="@string/search_hint"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
>
</searchable>
根据谷歌文档,我必须使用android:voiceSearchMode =“showVoiceSearchButton | launchRecognizer”来显示MIC按钮。
我按照文档操作但没有显示MIC按钮来捕获语音输入。
有人可以帮我吗?
答案 0 :(得分:2)
您需要创建SearchableConfiguration。将其添加为xml资源文件夹中的searchable.xml
:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="search..."
android:label="@string/app_name"
<!-- the next line enables the voice button display -->
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"/>
答案 1 :(得分:1)
我有类似的问题 - 某些设备上的麦克风图标,但其他设备上没有(例如三星Galaxy S5设备)。
我已经通过确认YouTube应用程序出现同样的问题来检查我的代码是否存在问题。
我建议进行网络搜索,了解如何为特定设备启用语音输入 - 或者在Android / Samsung / etc用户论坛中发布帮助/指导。
另外,请确保您在设备上安装了Google app。
答案 2 :(得分:0)
您的设备或模拟器应安装Google服务。
对于没有像Genymotion这样的G-app的模拟器,人们应该手动下载谷歌应用程序。可以从opengapps.org/获得,使用他们的任何捆绑并放在模拟器窗口和闪存并重新启动。 可以解决这个问题
答案 3 :(得分:0)
您需要将搜索配置设置为SearchView
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
然后你需要处理搜索结果onNewIntent()
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
searchView.setQuery(text, false);
}
}
答案 4 :(得分:0)
我搜索了这个问题的解决方案,最后我得到了解决方案!!!
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = findViewById(R.id.searchView);
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
// Do not iconify the widget; expand it by default
您必须将SEARCH_SERVICE附加到搜索视图才能启用音频搜索
答案 5 :(得分:-1)
并在onCreate方法中放了这个
@Override
protected void onNewIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
query = intent.getStringExtra(SearchManager.QUERY);
callSearch(query);
Log.d(TAG, "onNewIntent: " +query);
Toast.makeText(getApplicationContext(),query,Toast.LENGTH_LONG).show();
}
}