androidsearchView去掉默认下划线改为圆角搜索框

    xiaoxiao2021-03-25  143

         客户要实现一个圆角的搜索框,我想着5分钟就可以搞定了,于是开始码

    1、先定义搜索框

    <SearchView android:id="@+id/sv_cus" android:layout_width="match_parent" android:layout_height="wrap_content" android:iconifiedByDefault="false" android:background="@drawable/searchview_line" android:queryHint="请输入姓名" /> 2.然后定义一个资源文件  searchview_line.xml 来设置搜索框的样式

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <!-- 表示shape的四个角的角度。只适用于矩形shape,这里的角度是指圆角的程度 --> <corners android:radius="50dp" /> <!-- 这个标签表示纯色填充,通过android:color即可指定shape中填充的颜色 --> <solid android:color="@color/white" /> <!-- Shape的描边,下面指定了描边的宽度和描边的颜色 --> <stroke android:width="1dp" android:color="#d9d9d9" /> </shape> 3.在后台获取到搜索框,并定义搜索的监听

    svCustomer = (SearchView) findViewById(R.id.cus);    // 设置搜索文本监听         svCustomer.setOnQueryTextListener(new SearchView.OnQueryTextListener() {             // 当搜索内容改变时触发该方法             @Override             public boolean onQueryTextChange(String newText) {                 if (!TextUtils.isEmpty(newText)){ //                    mListView.setFilterText(newText);                 }else{                     DataKit.searchParams.setSearchKey("");                     search();                 }                 return false;             }             @Override             public boolean onQueryTextSubmit(String queryText) {                 if (svCustomer != null) {                     // 得到输入管理对象                     InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);                     if (imm != null) {                         // 这将让键盘在所有的情况下都被隐藏,但是一般我们在点击搜索按钮后,输入法都会乖乖的自动隐藏的。                         imm.hideSoftInputFromWindow(svCustomer.getWindowToken(), 0); // 输入法如果是显示状态,那么就隐藏输入法                     }                     DataKit.searchParams.setSearchKey(queryText);                     svCustomer.clearFocus(); // 不获取焦点                     search();                 }                 return true;             }         }); 结果效果竟然是圆角与下划线并存,虽然搜索功能实现了,但样式好丑啊

    于是我就去查搜索框的属性,也没找到它有设置下划线这个属性呀,就去百度了一下,原来需要动态改变一下

            if (svCus != null) {             try {        //--拿到字节码                 Class<?> argClass = svCustomer.getClass();                 //--指定某个私有属性,mSearchPlate是搜索框父布局的名字                 Field ownField = argClass.getDeclaredField("mSearchPlate");                 //--暴力反射,只有暴力反射才能拿到私有属性                 ownField.setAccessible(true);                 View mView = (View) ownField.get(svCus);                 //--设置背景                 mView.setBackgroundResource(R.drawable.searchview_line);             }             catch (Exception e) {                 e.printStackTrace();             }         }

    然后去掉布局文件中设置的那个 背景

    <SearchView android:id="@+id/sv_cus" android:layout_width="match_parent" android:layout_height="wrap_content" android:iconifiedByDefault="false" //这一行去掉啦 android:queryHint="请输入姓名" />效果就出来啦

    转载请注明原文地址: https://ju.6miu.com/read-2236.html

    最新回复(0)