在开发项目的时候遇到个问题,在给searchView添加黑色背景后,光标不见了(光标为黑色的),编辑框的背景还在很难看。查看源码之后,里用反射机制进行修改具体代码:
try {
Class<?> argClass=mSearchView.getClass();
//指定某个私有属性
Field ownField=argClass.getDeclaredField("mSearchPlate"); //注意mSearchPlate的背景是stateListDrawable(不同状态不同的图片) 所以不能用BitmapDrawable
//setAccessible 它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false
ownField.setAccessible(true);
View mView=(View) ownField.get(mSearchView);
mView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.search_view_background));
//指定某个私有属性
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);
mCursorDrawableRes.set(mQueryTextView.get(mSearchView), R.drawable.text_cursor_holo_dark);//注意第一个参数持有这个属性(mQueryTextView)的对象(mSearchView) 光标必须是一张图片不能是颜色,因为光标有两张图片,一张是第一次获得焦点的时候的闪烁的图片,一张是后边有内容时候的图片,如果用颜色填充的话,就会失去闪烁的那张图片,颜色填充的会缩短文字和光标的距离(某些字母会背光标覆盖一部分)。
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}