自定义searchview的编辑框,搜索按钮,删除按钮,光标等

Posted mybook1122

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义searchview的编辑框,搜索按钮,删除按钮,光标等相关的知识,希望对你有一定的参考价值。

多说无益,直接上代码。
<pre name="code" class="java"><span style="white-space:pre">	</span>   Class<?> argClass=mSearchView.getClass();
            //指定某个私有属性
            Field mSearchHintIconField = argClass.getDeclaredField("mSearchHintIcon");
            mSearchHintIconField.setAccessible(true);
            ImageView mSearchHintIcon = (ImageView)mSearchHintIconField.get(mSearchView);
//            mSearchHintIcon.setVisibility(View.GONE);
            mSearchHintIcon.setImageResource(R.drawable.main_search_selector);
            
            //注意mSearchPlate的背景是stateListDrawable(不同状态不同的图片)  所以不能用BitmapDrawable
            Field ownField = argClass.getDeclaredField("mSearchPlate");
            //setAccessible 它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false
            ownField.setAccessible(true);
            View mView = (View) ownField.get(mSearchView);
            mView.setBackground(getResources().getDrawable(R.drawable.person_edittext_selector));


 
<pre name="code" class="java"> <span style="white-space:pre">	</span>    //修改关闭图标
            Field mCloseButton = argClass.getDeclaredField("mCloseButton");
            mCloseButton.setAccessible(true);
            ImageView backView = (ImageView) mCloseButton.get(mSearchView);
            backView.setImageResource(R.drawable.delete_selector);
            
            //修改为展开时的搜索图标
            Field mSearchButton = argClass.getDeclaredField("mSearchButton");
            mSearchButton.setAccessible(true);
            ImageView search = (ImageView) mSearchButton.get(mSearchView);
            search.setImageResource(R.drawable.main_search_selector);
           
            //修改光标
            //指定某个私有属性  
            Field mQueryTextView = argClass.getDeclaredField("mQueryTextView");
            mQueryTextView.setAccessible(true);
            Class<?> mTextViewClass = mQueryTextView.get(mSearchView).getClass().getSuperclass().getSuperclass().getSuperclass();
            //mCursorDrawableRes光标图片Id的属性 这个属性是TextView的属性,所以要用mQueryTextView(SearchAutoComplete)
            //的父类(AutoCompleteTextView)的父  类( EditText)的父类(TextView)  
            Field mCursorDrawableRes = mTextViewClass.getDeclaredField("mCursorDrawableRes");
            //setAccessible 它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false
            mCursorDrawableRes.setAccessible(true);
            //注意第一个参数持有这个属性(mQueryTextView)的对象(mSearchView) 光标必须是一张图片不能是颜色,因为光标有两张图片,
            //一张是第一次获得焦点的时候的闪烁的图片,一张是后边有内容时候的图片,如果用颜色填充的话,就会失去闪烁的那张图片,
            //颜色填充的会缩短文字和光标的距离(某些字母会背光标覆盖一部分)。
            mCursorDrawableRes.set(mQueryTextView.get(mSearchView), R.drawable.divider_selector);  


 

以上是关于自定义searchview的编辑框,搜索按钮,删除按钮,光标等的主要内容,如果未能解决你的问题,请参考以下文章

Android自定义View实战之超简单SearchView

Android学习笔记(29):搜索框SearchView

android 搜索:自定义建议布局

Android ActionBar 自定义搜索视图

苹果笔记本如何清除百度搜索框中的历史记录?

放置在 Listview 上时,Android Searchview 不会触发