【问题标题】:Android search bar with mic & mic events. Android searchview with mic带有麦克风和麦克风事件的 Android 搜索栏。带麦克风的 Android 搜索视图
【发布时间】:2016-01-14 17:08:15
【问题描述】:

我在我的应用程序中使用搜索视图。我想获取在 searchview 文本框中输入的文本并将其显示在另一个文本视图上。

我可以使用 searchviewListener 来做到这一点。

searchView.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            //adapter.filterData(query);
            //display text where ever i want

            return false;
        }

        @Override
        public boolean onQueryTextChange(String query) {
            adapter.filterData(query);
            //display text where ever i want
            return false;
        }
    });

    return true;
}

现在我使用 Mic 制作了 serachView

android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"

麦克风正在显示并可点击。完美..

现在我的问题是如何捕获这个 MIC 数据并在我想要的任何地方显示文本。

【问题讨论】:

    标签: android android-layout searchview android-search


    【解决方案1】:

    为了在此处显示从 MIC 捕获的数据,我尝试在 android developer link 的帮助下给出相同的答案。

    正如你在问题中提到的, *麦克风正在显示并可点击。完美..如何捕获此 MIC 数据并在我想要的任何位置显示文本。 *

    您需要为 Seachable 和 xml 资源提供相同的意图过滤器。

    要获取麦克风捕获的数据(将作为对话框打开),您需要在检查意图操作Intent.ACTION_SEARCH 后在活动的onNewIntent 中处理它

    search_voice.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <android.support.v7.widget.Toolbar 
            android:id="@+id/ab_tool"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#00FFFFFF"
            android:minHeight="?attr/actionBarSize">
    
        </android.support.v7.widget.Toolbar>
        <TextView
            android:id="@+id/txtVoiceSeachQuery"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#FF0000"
            android:textSize="26sp" />
    </LinearLayout>
    

    搜索语音测试

    public class SearchVoiceTest extends AppCompatActivity {
        private TextView txtVoiceSeachQuery;
        private SearchView searchView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.search_voice);
            Toolbar toolbar = (Toolbar) findViewById(R.id.ab_tool);
            setSupportActionBar(toolbar);
            toolbar.setTitle("Voice Text Display");
            txtVoiceSeachQuery = (TextView) findViewById(R.id.txtVoiceSeachQuery);
        }
    
    
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
                String query = intent.getStringExtra(SearchManager.QUERY);
                searchView.setQuery(String.valueOf(query), false);
            }
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.menu_home_screen, menu);
            searchView =
                    (SearchView) menu.findItem(R.id.search_view).getActionView();
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
            searchView.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    //adapter.filterData(query);
                    //display text where ever i want
                    return false;
                }
    
                @Override
                public boolean onQueryTextChange(String query) {
                    //display text where ever i want
                    if (txtVoiceSeachQuery != null) {
                        txtVoiceSeachQuery.setText(query);
                    }
                    return false;
                }
            });
    
            return true;
        }
    }
    

    AndroidManifest 活动声明

     <activity
                android:name="com.example.search.voice.SearchVoiceTest"
                android:configChanges="orientation|screenSize"
                android:launchMode="singleTop" android:label="Search Voice Test"
                android:theme="@style/AppThemeSliderToolbar">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <action android:name="android.intent.action.SEARCH" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <meta-data
                    android:name="android.app.searchable"
                    android:resource="@xml/search_with_voice" />
    
    
            </activity>
    

    res/xml/search_with_voice.xml

    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:hint="Give Your Query Here"
        android:label="@string/app_name"
        android:voiceSearchMode="showVoiceSearchButton|launchRecognizer">
    </searchable>
    

    res/menu/menu_home_screen.xml

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        >
        <item
            android:id="@+id/search_view"
            android:title="Search"
            app:actionViewClass="android.support.v7.widget.SearchView"
            app:showAsAction="ifRoom|collapseActionView"></item>
    </menu>
    

    将查询分配给 seachview 后,我们可以在 onQueryTextChange 中获得回调 setOnQueryTextListener,因此从那里分配给 TextView 用于测试目的值,您可以在那里进行更改。

    这里我给出了我的答案的输出链接。

    如果有什么请告诉我

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多