zoukankan      html  css  js  c++  java
  • 自定义searchview的编辑框,搜索按钮,删除按钮,光标等

      //指定某个私有属性  
                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));  
         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);    
  • 相关阅读:
    思考:学习redis的数据结构应该从三个维度来学习?
    思考:一个程序员老说不会碰到或者用到复杂的数据结构或者算法,是这样吗?
    思考:软件系统设计的(前期)权衡?
    思考:一个推荐引擎工程师的能力覆盖
    思考:关于服务架构的取舍:
    模拟斗地主真人在线发牌
    java反射机制
    C-练习题
    java-线程的生命周期
    生产者和消费者模型
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4651350.html
Copyright © 2011-2022 走看看