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

原创 2016年12月15日 19:21:16

实现自动完成。上代码。布局文件,在ToolBar下面加一个ListView。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.devin.searchviewdemo.MainActivity">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar_top"
        android:layout_width="match_parent"
        android:background="#d36302"
        android:layout_height="?actionBarSize">
    </android.support.v7.widget.Toolbar>

    <ListView
        android:id="@+id/list_container"
        android:layout_width="match_parent"
        android:layout_below="@+id/toolbar_top"
        android:layout_height="match_parent"/>
</RelativeLayout>

Activity代码中,设置ListView 的setTextFilterEnabled属性为true,在onQueryTextChange方法中设置setFilterText过滤器。

public class MainActivity extends AppCompatActivity implements
        SearchView.OnQueryTextListener {

    private static final String TAG = "SearchView";
    private SearchView searchView;
    private Toolbar mToolBar;
    private ListView mListView;
    private ArrayAdapter<String> adapter;
    private Menu menu;
    private String[] citys={"hanzhong","hangzhou","hankou","tianjin","tianshui","nanjing","nanning"};
    private List<String> dataList;
    //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);
        initView();
    }

    /**
     * 初始化
     */
    private void initView() {
        mToolBar = (Toolbar) findViewById(R.id.toolbar_top);
        setSupportActionBar(mToolBar);
        mListView = (ListView) findViewById(R.id.list_container);
        dataList=new ArrayList<>();
        getData();
    }

    private void getData() {
        for(String str:citys) {
            dataList.add(str);
        }
        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,citys);
        mListView.setAdapter(adapter);
        mListView.setTextFilterEnabled(true);
    }

    @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控件添加到该菜单项中

        //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);
            //清除过滤器
            mListView.clearTextFilter();
        } else {
            btnItem.setVisible(true);
        }
        //设置过滤器文本
        mListView.setFilterText(newText);
        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;
    }
}

设想:如果过滤过程中能够使关键文本高亮显示就好了。初步想法自定义一个item布局,放两个textView,根据搜索关键字将符合条件的列表项字符串拆分显示。

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

相关文章推荐

安卓开发之SearchView的实践使用

SearchView是android中一个搜索框组件,它不是一个单独的view,而是一个LinearLayout布局,包括表示Search图标和清除图标等其它图标的imageView、具有下拉建议列表...

Android UI--开源项目IndexableListView(字母索引)

AndroidUI效果--开源项目IndexableListView(字母索引) 2013年12月13日 开源项目IndexableListView的学习 开发通讯录相关的应用的时候可能会...

关于SearchView中onQueryTextSubmit方法执行两次的解决方法

我们在使用SearchView的时候,总会用到监控文本框变化的事件,代码如下:         //文本框输入事件 searchView.setOnQueryTextListener...

MaterialDesign学习篇(五),使用SearchView的正确姿势

介绍大多APP都具有搜索功能,但是大部分都是在标题栏中放置搜索的图标或者是不可输入的EditText,当点击的时候,开启另外一个界面进行搜索,但是网易云音乐在搜索本地音乐的时候,点击搜索按钮,就会出现...

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

不多说,上代码。 一、首先,写好布局,就是一个ToolBar,把主题设置为NoActionBar。纯熟个人习惯,用ActionBar也可以。 二、创建menu文件。其中有个item只是为了给searc...

一步一步学android控件(之二十九)—— SearchView

创建Searchable配置文件 首先,在res/xml目录下添加配置文件searchable.xml——该配置文件确定了使用searchView还是searchDialog和定义了一些功能的行为,如...

安卓屏幕完美适配方案——独家秘笈

一、为什么要适配由于Android系统的开放性,任何用户、开发者、硬件厂商、运营商都可以对Android系统和硬件进行定制,修改成他们想要的样子。但是这种“碎片化”到达什么程度呢?以上每一个矩形都代表...

仿饿了么购物车下单效果

仿饿了么购物车下单效果前一段由于新项目需要,开发一个类似饿了么购物车下单效果,电商类、外卖类、点餐类项目都可以用的上,废话不多说请看效果。效果图如下:主要的功能:就是左侧展示分类,右侧展示分类下商品的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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