2017-12-21 1 views
0

Ich habe an einer Praxis-App gearbeitet, wo der Benutzer die Farbe von Text und Hintergrund einstellen kann. Aber ich versagen, einen Weg zu finden, um esÄnderung Edittext Cursor Farbe und Größe ohne XML?

android:textCursorDrawable="@null" 

Ich habe dies versucht, und während es die Farbe auf das gleiche wie die Textfarbe setzt es ist nicht das, was ich suche zu tun, wie ich ein bestimmtes habe Größe für meinen Cursor eingestellt.

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <size android:width="10dip" /> 
    <size android:height="14dip" /> 
    <solid android:color="#fff" /> 
</shape> 

Ive auch versucht android: color = "@ null", aber das gibt nichts zurück ... offensichtlich wirklich (Das ist ein Hinweis auf meine eigene Dummheit).

Endlich habe ich das gesehen.

Field f = null; 
f = TextView.class.getDeclaredField("mCursorDrawableRes"); 
f.setAccessible(true); 
f.set(editText, R.drawable.cursor); 

Kann ich über diesen Weg eine Farbe einstellen? oder ist es nur eine Java-Version des XML-Aufrufs, den ich bereits habe? Anyhelp würde geschätzt werden.

Zusammenfassend, ich möchte die Farbe des Cursors genauso einstellen wie die Textfarbe, aber habe meine Höhe und Breite des Cursors bei 10x14?

Danke

Antwort

1

Bitte diese Farbänderung für Cursor überprüfen,

public static void setCursorColor(EditText view, @ColorInt int color) { 
    try { 
    // Get the cursor resource id 
    Field field = TextView.class.getDeclaredField("mCursorDrawableRes"); 
    field.setAccessible(true); 
    int drawableResId = field.getInt(view); 

    // Get the editor 
    field = TextView.class.getDeclaredField("mEditor"); 
    field.setAccessible(true); 
    Object editor = field.get(view); 

    // Get the drawable and set a color filter 
    Drawable drawable = ContextCompat.getDrawable(view.getContext(), drawableResId); 
    drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); 
    Drawable[] drawables = {drawable, drawable}; 

    // Set the drawables 
    field = editor.getClass().getDeclaredField("mCursorDrawable"); 
    field.setAccessible(true); 
    field.set(editor, drawables); 
    } catch (Exception ignored) { 
    } 
} 
+0

Wie rufe ich die Leere? Pflanze ich es in meinem oncreate? –

+0

können Sie es aufrufen, nachdem Sie die Edittext-Referenz von findViewById in Oncreate-Methode abgerufen haben. –

+0

AH! Sie sind brillant. Danke, bang on funktioniert wie ein Leckerbissen. Prost –

Verwandte Themen