关于SearchView的使用理解

SearchView
主要是用于一个提示功能,类似于 这种效果。这里写图片描述
当然上图的效果是SearchView + ListView + popupWindow的组合效果。

首先,SearchView的使用会有十分难看的黑框,所以,找到的解决办法就是写个方法,Adapter.getFilter().filter(String x);,这样才能消除黑框,至于黑框的效果,各自体会好看与否。

用到的是上一篇写到的ListView的使用,在此基础上相应改动。
先放xml代码:
这个xml代码单纯的就是ListView和SearchView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.chenxuanhe.searchviewtest.MainActivity">

    <android.support.v7.widget.SearchView
        android:id="@+id/search_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

声明的数据 ,具体详细可参考上ListView的实现:

    private String[] data = {"A", "B", "C", "D", "ad", "adaf", "E", "F",
            "Q", "BW", "CE", "DR", "ad", "adaf", "Ez", "FX",
            "A", "BZ", "CDD", "DFA", "ad", "adaf", "E", "F",
            "AZCZ", "BC", "CBB", "DV", "adS", "adaf", "E", "F"};

适配器一定要用ArrayAdapter《String》才可以,因为只有ArrayAdapter才能有下面的那个方法

adapter1 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data);
 listView.setTextFilterEnabled(true); //开启过滤功能
        searchView.setIconifiedByDefault(false);//设置为不默认缩小为图标
        searchView.setQueryHint("请输入查询");//设置空白时的提示字符
        listView.setAdapter(adapter1);//为Listview设置ArrayAdapter
//为searchview设置监听
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
         //输入完毕点击提交时候的操作
            @Override
            public boolean onQueryTextSubmit(String query) {
                Toast.makeText(MainActivity.this, "点击的是" + query, Toast.LENGTH_SHORT).show();
                return false;
            }
         //搜索字符在改变时的裸机操作
            @Override
            public boolean onQueryTextChange(String newText) {
                if (!TextUtils.isEmpty(newText)) {
                    setTextView(newText);
                 //   listView.setFilterText(newText);//该写法会有难看的大黑框
                } else {
                    listView.clearTextFilter();//清除掉过滤条目
                }
                return false;
            }
        });

这个方法非常非常非常关键,也只有ArrayAdapter才能有这个方法,其他都不行,那么都会出现一个巨丑的黑框,但是这样写就能消除黑框

重点重点重点:

  /**
     * 这个方法,能够改变适配器的SearchView自带的大黑框属性,但是只能是ArrayAdapter才行,
     * 其他的适配器都没有该方法adapter.getFilter().filter(String x)
     * @param x
     */
    private void setTextView(String x) {
        adapter1.getFilter().filter(x);
    }

到这里,SearchView也就介绍使用完了。其实都是十分简单的,主要就是上面的那个方法。其实代码就一句,new Adapter.getFilter().filter(String x)只是我在调用的时候不方便,则将其封装为一个方法调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值