不使用xml更改edittext游标颜色和大小?

时间:2017-12-21 08:10:17

标签: java android

我一直致力于练习应用,用户可以在其中设置文字和背景的颜色。但我没有找到解决方法

android:textCursorDrawable="@null"

我已经尝试了这一点,虽然它将颜色设置为与文字颜色相同,但它并不是我想要做的事情,因为我为光标设置了特定的尺寸。 / p>

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

我也试过android:color =&#34; @ null&#34;但这没有任何回报......显然真的(这是我自己愚蠢的一个注释)。

最后,我已经看到了这一点。

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

我可以通过这种方式设置颜色吗?或者它只是我已经拥有的xml调用的java版本? Anyhelp将不胜感激。

基本上,总而言之,我喜欢将光标的颜色设置为与编辑文本颜色相同但光标的高度和宽度为10x14?

谢谢

1 个答案:

答案 0 :(得分:1)

请检查光标颜色变化

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) {
  }
}