gpt4 book ai didi

android - 在 API Q+ 上,EditText 的自定义光标可绘制被忽略

转载 作者:行者123 更新时间:2023-12-03 20:47:58 26 4
gpt4 key购买 nike

我想将自定义可绘制对象设置为 EditText 的光标.
对于 API < Android Q,我正在使用反射,它按预期工作。从Android Q开始我们有方便的方法setTextCursorDrawable(@Nullable Drawable textCursorDrawable) .我使用它如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
textCursorDrawable = ContextCompat.getDrawable(context,R.drawable.drawable_cursor)!!.tintDrawable(color)
}
在哪里 tintDrawable方法是:
private fun Drawable.tintDrawable(@ColorInt color: Int): Drawable {
return when (this) {
is VectorDrawableCompat -> this.apply { setTintList(ColorStateList.valueOf(color)) }
is VectorDrawable -> this.apply { setTintList(ColorStateList.valueOf(color)) }
else -> {
val wrappedDrawable = DrawableCompat.wrap(this)
DrawableCompat.setTint(wrappedDrawable, color)
DrawableCompat.unwrap(wrappedDrawable)
}
}
}
R.drawable.drawable_cursor只是简单的矩形形状:
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<size android:width="2dp" />
<solid android:color="?android:textColorPrimary" />
</shape>
但是根本没有明显的效果。即使没有应用着色光标drawable也保持不变。
文档中提到

Note that any change applied to the cursor Drawable will not be visible until the cursor is hidden and then drawn again.


所以我想我需要手动隐藏光标并通过 setCursorVisible使其可见方法,但仍然没有效果。
有谁知道我做错了什么?

最佳答案

经过进一步调查,我发现 setTextCursorDrawable(@Nullable Drawable textCursorDrawable) EditText 的每个实例仅工作一次.因此,如果您将 textCursorDrawable 更改为您的自定义一次,那么您将无法将其更改为另一个,它只会忽略您想要进行的任何更改。
我的屏幕有默认状态,所以在屏幕初始化setTextCursorDrawable第一次更改了可绘制的光标,但我没有注意到。
所以请注意错误(或预期的行为可能?),您无法在 EditText 的一个实例中多次更改可绘制的光标。 .

关于android - 在 API Q+ 上,EditText 的自定义光标可绘制被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64609331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com