問(wèn)題描述
如果我在 XML 中添加 EditText
我可以設(shè)置 textCursorDrawable="@null"
:
現(xiàn)在我用 Java 繪制一個(gè) EditText
.我想設(shè)置 android:textCursorDrawable="@null"
.
LinearLayout.LayoutParams paramtext = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,線性布局.LayoutParams.WRAP_CONTENT);EditText txtOther = new EditText(this);txtOther.setLayoutParams(paramtext);txtOther.setBackgroundColor(Color.WHITE);txtOther.setTextColor(Color.BLACK);txtOther.setId(99999);//txtOther.setCursorDrawable ?
如何設(shè)置?
2019 年更新:沒(méi)有設(shè)置可繪制光標(biāo)的公共 API. 參見(jiàn) https://stackoverflow.com/a/57555148/253468 適用于 29 及更高版本的 API,在此之前,您需要有條件地使用反射,如下所述.p>
在 API 29 之前,您可以使用反射以編程方式設(shè)置它.mCursorDrawableRes
字段沒(méi)有更改,因此這應(yīng)該適用于所有設(shè)備,除非制造商更改了某些內(nèi)容或稍后更改.
使用反射設(shè)置光標(biāo):
EditText yourEditText = new EditText(context);...嘗試 {//https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564字段 f = TextView.class.getDeclaredField(mCursorDrawableRes");f.setAccessible(true);f.set(yourEditText, R.drawable.cursor);} 捕捉(忽略異常){}
在你的應(yīng)用中定義一個(gè)可繪制的光標(biāo):
另一種方法:
您也可以通過(guò)以下方法設(shè)置光標(biāo)顏色:
public static void setCursorDrawableColor(EditText editText, int color) {嘗試 {字段 fCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");fCursorDrawableRes.setAccessible(true);int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);字段 fEditor = TextView.class.getDeclaredField("mEditor");fEditor.setAccessible(true);對(duì)象編輯器 = fEditor.get(editText);類<?>clazz = editor.getClass();字段 fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");fCursorDrawable.setAccessible(true);可繪制 [] 可繪制 = 新的可繪制 [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(編輯器,drawables);} catch (Throwable 被忽略) {}}
If I add an EditText
in XML I can set 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" />
Now I draw an EditText
in Java. I want set 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 ?
How do set it?
Update 2019: There is no public API to set the cursor drawable. See https://stackoverflow.com/a/57555148/253468 for API available on 29 and above, before that conditionally you'll need to use reflection as described below.
Before API 29 you can set it programmatically by using reflection. The field mCursorDrawableRes
hasn't changed so this should work on all devices, unless a manufacturer changed something or it is later changed.
Use reflection to set the 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) {
}
Define a cursor drawable in your app:
<?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>
Another approach:
You can also set the cursor color with the following method:
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) {
}
}
這篇關(guān)于以編程方式設(shè)置 textCursorDrawable的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!