如果我在 XML中添加EditText,我可以设置textCursorDrawable =“@ null”: EditText android:id="@+id/txtE3Casecode4" android:layout_width="30dp" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:bac
<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" />
现在我在Java中绘制一个EditText.我想设置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 ?
怎么设置它?
没有公共API来设置光标可绘制.您可以使用反射以编程方式设置它.字段mCursorDrawableRes没有改变,因此这应该适用于所有设备,除非制造商更改了某些内容或稍后更改了.使用反射设置光标:
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) { }
在您的应用中定义可绘制的光标:
<?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>
另一种方法:
您还可以使用以下方法设置光标颜色:
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) { } }