android SearchView 樣式修改

try {
            Class argClass=mSearchView.getClass();
            //指定某個私有屬性
            Field mSearchHintIconField = argClass.getDeclaredField("mSearchHintIcon");
            mSearchHintIconField.setAccessible(true);
            View mSearchHintIcon = (View)mSearchHintIconField.get(mSearchView);
            mSearchHintIcon.setVisibility(View.GONE);
            
            //註意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.contacts_search_writebg));


            //指定某個私有屬性  
            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.icon_small_add_delete);  
        } catch (Exception e) {
            e.printStackTrace();
        }

發佈留言