widget.SearchView没有在android中显示用于语音搜索的MIC按钮

时间:2016-05-14 10:12:34

标签: android

我在名为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按钮来捕获语音输入。

有人可以帮我吗?

6 个答案:

答案 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();
    }
}