2017-08-18 25 views
0

選択したアプリテーマに基づいて、プロジェクトで使用されているすべての編集テキストに対してEditTextの色と幅をプログラムで変更します。
私はXMLを使用してこれを行うことはできず、プログラム的な解決策が必要です。Android反射方法なしでプログラムでtextcursordrawableを設定する

だから私は、私は問題が(「mCursorDrawableRes」)、getDeclaredFieldある
set textCursorDrawable programmatically

で提案されているすべてのメソッドを試してみました。この

void setEditTextColorDrawable(int ClrVar) 
{ 
    // Code Todo 
} 

を設定するには、カスタム関数を作成するには、上記利用できませんAPI22。
だから、私も22

try { 
    // https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564 
    Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); 
    f.setAccessible(true); 
    f.set(yourEditText, R.drawable.cursor); 
} catch (Exception ignored) 
{ 
    log.d("TAG", "This is depricated") 
} 

出力の上のすべてのAPIのためにこれを行うのですか。あなたは、液滴の色を変更したい場合は

答えて

0
public static void setCursorDrawableColor(EditText editText, int color) { 
    try { 
     Field fCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes"); 
     fCursorDrawableRes.setAccessible(true); 
     int mCursorDrawableRes = fCursorDrawableRes.getInt(editText); 
     Field fEditor = TextView.class.getDeclaredField("mEditor"); 
     fEditor.setAccessible(true); 
     Object editor = fEditor.get(editText); 
     Class<?> clazz = editor.getClass(); 
     Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable"); 
     fCursorDrawable.setAccessible(true); 
     Drawable[] drawables = new Drawable[2]; 
     drawables[0] = editText.getContext().getResources().getDrawable(mCursorDrawableRes); 
     drawables[1] = editText.getContext().getResources().getDrawable(mCursorDrawableRes); 
     drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN); 
     drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN); 
     fCursorDrawable.set(editor, drawables); 
    } catch (Throwable ignored) { 
     ignored.getMessage(); 
    } 
} 

は、このコードを使用することができます「これは廃止予定されます」: https://gist.github.com/jaredrummler/2317620559d10ac39b8218a1152ec9d4

関連する問題