Android--SearchView基本使用

谷歌提供了搜索控件SearchView,在v7包中,我们可以在Toolbar的menu中定义它
<?xml version ="1.0" encoding ="utf-8"?><!--  Learn More about how to use App Actions: https://developer.android.com/guide/actions/index.html -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/searchview"
        android:orderInCategory="100"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="搜索"
        app:showAsAction="always" />

    <item
        android:title="其他"
        app:showAsAction="never" />
    <item
        android:title="设置"
        app:showAsAction="never" />
</menu>
SearchView.jpg
SearchView.jpg
在Activity的onCreateOptionsMenu方法中获取SearchView
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        MenuItem menuItem = menu.findItem(R.id.searchview);

        SearchView searchView;
        if (Build.VERSION.SDK_INT >= 14) {//大于 v14
            searchView = (SearchView) menuItem.getActionView();
        } else {//小于 v14
            searchView = (SearchView) MenuItemCompat.getActionView(menuItem);

        }

        //默认就是搜索框展开
        searchView.setIconified(false);
        //一直都是搜索框,搜索图标在输入框左侧(默认是内嵌的)
        searchView.setIconifiedByDefault(false);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            //文字输入完成,提交的回调
            @Override
            public boolean onQueryTextSubmit(String s) {
                return false;
            }

            //输入文字发生改变
            @Override
            public boolean onQueryTextChange(String s) {
                return false;
            }
        });
        
        //点击搜索图标,搜索框展开时的回调
        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
            }
        });

        return super.onCreateOptionsMenu(menu);
    }
如果想要修改它的控件,可以通过id查找,我们先看下SearchView的布局文件
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/search_bar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

    <!-- This is actually used for the badge icon *or* the badge label (or neither) -->
    <TextView
            android:id="@+id/search_badge"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:layout_marginBottom="2dip"
            android:drawablePadding="0dip"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="?android:attr/textColorPrimary"
            android:visibility="gone" />

    <ImageView
            android:id="@+id/search_button"
            style="?attr/actionButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center_vertical"
            android:focusable="true"
            android:contentDescription="@string/abc_searchview_description_search" />

    <LinearLayout
            android:id="@+id/search_edit_frame"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_marginLeft="8dip"
            android:layout_marginRight="8dip"
            android:orientation="horizontal"
            android:layoutDirection="locale">

        <ImageView
                android:id="@+id/search_mag_icon"
                android:layout_width="@dimen/abc_dropdownitem_icon_width"
                android:layout_height="wrap_content"
                android:scaleType="centerInside"
                android:layout_gravity="center_vertical"
                android:visibility="gone"
                style="@style/RtlOverlay.Widget.AppCompat.SearchView.MagIcon" />

        <!-- Inner layout contains the app icon, button(s) and EditText -->
        <LinearLayout
                android:id="@+id/search_plate"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:layout_gravity="center_vertical"
                android:orientation="horizontal">

            <view class="android.support.v7.widget.SearchView$SearchAutoComplete"
                  android:id="@+id/search_src_text"
                  android:layout_height="36dip"
                  android:layout_width="0dp"
                  android:layout_weight="1"
                  android:layout_gravity="center_vertical"
                  android:paddingLeft="@dimen/abc_dropdownitem_text_padding_left"
                  android:paddingRight="@dimen/abc_dropdownitem_text_padding_right"
                  android:singleLine="true"
                  android:ellipsize="end"
                  android:background="@null"
                  android:inputType="text|textAutoComplete|textNoSuggestions"
                  android:imeOptions="actionSearch"
                  android:dropDownHeight="wrap_content"
                  android:dropDownAnchor="@id/search_edit_frame"
                  android:dropDownVerticalOffset="0dip"
                  android:dropDownHorizontalOffset="0dip" />

            <ImageView
                    android:id="@+id/search_close_btn"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:paddingLeft="8dip"
                    android:paddingRight="8dip"
                    android:layout_gravity="center_vertical"
                    android:background="?attr/selectableItemBackgroundBorderless"
                    android:focusable="true"
                    android:contentDescription="@string/abc_searchview_description_clear" />

        </LinearLayout>

        <LinearLayout
                android:id="@+id/submit_area"
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="match_parent">

            <ImageView
                    android:id="@+id/search_go_btn"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_vertical"
                    android:paddingLeft="16dip"
                    android:paddingRight="16dip"
                    android:background="?attr/selectableItemBackgroundBorderless"
                    android:visibility="gone"
                    android:focusable="true"
                    android:contentDescription="@string/abc_searchview_description_submit" />

            <ImageView
                    android:id="@+id/search_voice_btn"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_vertical"
                    android:paddingLeft="16dip"
                    android:paddingRight="16dip"
                    android:background="?attr/selectableItemBackgroundBorderless"
                    android:visibility="gone"
                    android:focusable="true"
                    android:contentDescription="@string/abc_searchview_description_voice" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
SearchView.png
通过findViewById方法,我们可以随意的修改它的控件样式,最后我们还要调用searchView.setSubmitButtonEnabled(true)才能起作用
ImageView imageView = searchView.findViewById(R.id.search_go_btn);
        imageView.setVisibility(View.VISIBLE);
        imageView.setImageResource(R.drawable.ic_arrow_back_black_24dp);
        searchView.setSubmitButtonEnabled(true);
SearchView带有右侧图标.jpg
此外SearchView还带有模糊搜索的功能,它的内部有一个Adapter
CursorAdapter mSuggestionsAdapter;
SearchView的基本使用就到此为止了
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android SearchView 是一个预置于 Android 框架中的可搜索组件,它允许用户在应用程序中搜索数据。它可以通过菜单项或直接在布局中使用。 要在应用程序中使用 SearchView,需要进行以下步骤: 1. 将 SearchView 添加到布局文件中。 ``` <SearchView android:id="@+id/search_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> ``` 2. 在 Activity 中获取 SearchView 对象。 ``` SearchView searchView = findViewById(R.id.search_view); ``` 3. 设置 SearchView 的属性和监听器。 ``` searchView.setIconifiedByDefault(false); // 设置展开时图标是否显示在搜索框内 searchView.setSubmitButtonEnabled(true); // 设置是否显示搜索框展开时的提交按钮 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { // 当用户提交搜索时触发该方法 return false; } @Override public boolean onQueryTextChange(String newText) { // 当用户输入搜索关键字时触发该方法 return false; } }); ``` 4. 在 onCreateOptionsMenu() 方法中设置 SearchView 为 ActionBar 的菜单项。 ``` @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); // 设置 SearchView 的属性和监听器 return true; } ``` 以上是使用 SearchView基本步骤,你还可以根据需要自定义 SearchView 的样式和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值