灵活运用SearchView搜索框控件(一)

原创 2016年12月15日 17:56:36

不多说,上代码。

一、首先,写好布局,就是一个ToolBar,把主题设置为NoActionBar。纯熟个人习惯,用ActionBar也可以。

二、创建menu文件。其中有个item只是为了给searchView提供自定义的提交按钮的。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/main_menu_item_search"
        android:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@drawable/search_1"
        android:title="搜索"
        app:showAsAction="always" />
    <item
        android:id="@+id/main_menu_item_btn_search"
        android:icon="@drawable/search_1"
        android:title="搜索"
        android:visible="false"
        app:showAsAction="always" />
    <item
        android:id="@+id/main_menu_item_friend"
        android:title="朋友" />
    <item
        android:id="@+id/main_menu_item_about"
        android:title="关于" />
</menu>

三、Activity代码。

package com.devin.searchviewdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements
        SearchView.OnQueryTextListener {

    private static final String TAG = "SearchView";
    private SearchView searchView;
    private Toolbar mToolBar;
    private Menu menu;
    //SearchView中的编辑框,这个编辑框是个android.support.v7.widget.SearchView$SearchAutoComplete
    private SearchView.SearchAutoComplete searchText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mToolBar = (Toolbar) findViewById(R.id.toolbar_top);
        setSupportActionBar(mToolBar);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_option_menu, menu);
        //取到menu对象,一边在其他地方调用
        this.menu = menu;
        MenuItem item = menu.findItem(R.id.main_menu_item_search);//获得菜单对象
        searchView = new SearchView(this);//添加搜索控件
        item.setActionView(searchView);

        //searchView.setIconified(false);//设置默认展开
        //searchView.setQueryHint("搜索关键字");//设置搜索关键字提示
        searchView.setOnQueryTextListener(this);//设置搜索监听
        //因为我们添加了一个自定义的提交按钮,所以将默认的按钮设为无效
        //searchView.setSubmitButtonEnabled(true);//设置提交按钮是否有效
        //搜索栏关闭事件
        searchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                Log.i(TAG, "关闭");
                return false;
            }
        });
        searchText = (SearchView.SearchAutoComplete) searchView.findViewById(R.id.search_src_text);
        return true;
    }

    /**
     * 点击提交
     *
     * @param query
     * @return
     */
    @Override
    public boolean onQueryTextSubmit(String query) {
        //有了自定义提交按钮就不用这里了
        Log.i(TAG, "submit:" + query);
        return false;
    }

    /**
     * 文本变化
     *
     * @param newText
     * @return
     */
    @Override
    public boolean onQueryTextChange(String newText) {
        MenuItem btnItem = menu.findItem(R.id.main_menu_item_btn_search);
        //监控文本变化,如果为空就隐藏自定义的按钮,否则就显示
        if (newText.isEmpty()) {
            btnItem.setVisible(false);
        } else {
            btnItem.setVisible(true);
        }
        return true;
    }

    /**
     * 菜单项选择监听
     *
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.main_menu_item_btn_search:
                //自定义的搜索提交按钮
                Toast.makeText(MainActivity.this, searchText.getText().toString(), Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
        return true;
    }
}


可以使用原生的提交按钮,是一个右方向的箭头,如果要用放大镜,就用自定义的。用文本变化监控其是否显示。点击时获取搜索框的文本。


还需要去研究自动完成的代码。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 搜索框:SearchView 的属性和用法详解

SearchView是Android原生的搜索框控件,它提供了一个用户界面,用于用户搜索查询。...
  • Airsaid
  • Airsaid
  • 2016年04月07日 16:55
  • 42733

v7.widget.SearchView的使用

SearchView出来已经相当久了,现在才拿出来讲,确实感觉有点跟不上时代的脚步,不管了,就当是给自己做个备份,忘记的时候还可以用来参考!顺便说一下最近的糟糕情况,好像…自从…五一假期过后,就一直没...
  • jxxfzgy
  • jxxfzgy
  • 2015年05月27日 23:16
  • 14948

MaterialDesign之SearchView全面解锁

一、简述 SearchView是v7包中的一个兼容性控件,它可以单独使用,也可以配合menu+toolbar一起使用。本文将使用第二种方式,对SearchView进行探索。最后将通过代码实战,实现 ...
  • lylodyf
  • lylodyf
  • 2017年06月16日 09:39
  • 977

搜索框(SearchView)详解

搜索框(SearchView)详解 ONE Goal, ONE Passion ! 整理一下一些系统常用的小组件.先说说搜索框吧. SearchView是 搜索框组件,它可以让用户在文本框内输入文...

Android中的搜索框(SearchView)的功能和用法

1、SearchView是搜索框组件,它可以让用户在文本框里输入文字,通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索。 2、SearchView组件的常用方法如下: ...

FloatingSearchView 的使用

FloatingSearchView 的使用 最近在工程中需要用到一个搜索栏,对于谷歌的设计规范中,谷歌是推荐了两种搜索栏在经过抉择之后,我准备要采用第一种设计的搜索栏。对于谷歌的规范,我本以为谷歌会...
  • gu18168
  • gu18168
  • 2017年03月07日 22:57
  • 880

Android中SearchView的功能和用法

具体内容请转至:点击打开链接 搜索框(SearchView)的功能与用法     SearchView是搜索框组件,它可以让用户在文本框内输入汉字,并允许通过监听器监控用户...

Android SearchView

项目需要实现Search功能,根据
  • lihenair
  • lihenair
  • 2014年05月29日 14:39
  • 20952

SearchView实时搜索初体验

效果从联系人拿到的数据实时筛选代码: Xml文件:

SearchView基本功能用法

布局文件,一个SearchView配套一个ListView,使其增加一个自动完成的功能,
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:灵活运用SearchView搜索框控件(一)
举报原因:
原因补充:

(最多只允许输入30个字)