style - propiedades edittext android
establecer textCursorDrawable mediante programaciĆ³n (3)
la respuesta es ---------------------> Es inalcanzable.
En realidad, también encontré este problema en mi trabajo, pero después de consultar el documento de Google y el código fuente, me gusta que no puedas establecer este atributo en código Java.
En la clase TextView
puedes encontrar el código a continuación
case com.android.internal.R.styleable.TextView_textCursorDrawable:
mCursorDrawableRes = a.getResourceId(attr, 0);
break;
pero el método textCursorDrawable()
solo existe en R.attr
, si desea establecer este atributo, solo puede llamar al método de construir a continuación incluyendo un editText en el archivo XML.
public EditText(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.editTextStyle);
}
Si agrego un EditText
en XML, puedo establecer textCursorDrawable="@null"
:
<EditText
android:id="@+id/txtE3Casecode4"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="#C7C7C5"
android:textCursorDrawable="@null"
android:ems="10"
android:inputType="number"
android:maxLength="2"
android:text="01"
android:textColor="#000000" />
Ahora dibujo un EditText
en Java. Quiero establecer android:textCursorDrawable="@null"
.
LinearLayout.LayoutParams paramtext = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
EditText txtOther = new EditText(this);
txtOther.setLayoutParams(paramtext);
txtOther.setBackgroundColor(Color.WHITE);
txtOther.setTextColor(Color.BLACK);
txtOther.setId(99999);
// txtOther.setCursorDrawable ?
¿Cómo se establece?
No hay una API pública para establecer el cursor dibujable. Puede establecerlo mediante programación mediante el uso de la reflexión. El campo mCursorDrawableRes
no ha cambiado, por lo que debería funcionar en todos los dispositivos, a menos que un fabricante haya cambiado algo o se mCursorDrawableRes
posteriormente.
Use la reflexión para establecer el cursor:
EditText yourEditText = new EditText(context);
...
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) {
}
Defina un cursor dibujable en su aplicación:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ff000000" />
<size android:width="1dp" />
</shape>
Otro enfoque:
También puede establecer el color del cursor con el siguiente método:
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) {
}
}
Si usa la biblioteca AppCompat y su Activity extends AppCompatActivity, puede establecer el color del cursor de texto (para todos los EditTexts) usando un estilo XML de colorAccent :
<style name="AppTheme" parent="@style/Theme.AppCompat">
<item name="colorAccent">#FF4081</item>
</style>
Esto funciona en Android 5+ y es compatible con versiones anteriores de Android desde Android 4.4 (API 19) hasta Android 4.0 (API 14). Nota: Si está utilizando un AutoCompleteTextView, asegúrese de que cualquier subclase personalizada amplíe AppCompatAutoCompleteTextView; de lo contrario, el estilo del cursor de texto no funcionará.
Consulte también esta guía sobre cómo aplicar el acento de color (tinte) a los botones del cuadro de diálogo: Tema de Android v21. El acento de color de la aplicación se ignora, sin relleno en los cuadros de diálogo