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

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

1、先定义搜索框

  

2.然后定义一个资源文件  searchview_line.xml 来设置搜索框的样式




    
    

    
    

    
    


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();
            }
        }

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

  
效果就出来啦




你可能感兴趣的:(android searchView 去掉默认下划线 改为圆角搜索框)