Как установить цвет курсора (каретки) несколько раз в AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Гость
 Как установить цвет курсора (каретки) несколько раз в Android

Сообщение Гость »


Предположим, у нас есть простой EditText, и я хочу изменить курсор (каретку) на какой-то другой цвет, прежде чем мы использовали отражения для получения доступа к частным полям, но с появлением Android API Q (29) мы теперь можно использовать textCursorDrawable, чтобы установить возможность рисования для мигающего курсора.

Вот XML-код EditText

Теперь мы можем использовать WrapDrawable для обертывания ColorDrawable, который будет установлен как значение textCursorDrawable EditText, чтобы мы могли изменить цвет курсора.

Вот код WrapDrawable:

class WrapDrawable(color: Int) : Drawable() { частный var drawable = ColorDrawable (цвет) @ColorInt переменная цвета: Int = цвет набор (значение) { поле = значение рисуемый = ColorDrawable (значение) } переопределить fun setBounds(слева: Int, сверху: Int, справа: Int, снизу: Int) { super.setBounds(слева, сверху, справа, снизу) drawable.setBounds(слева, сверху, справа, снизу) } переопределить удовольствие getConstantState(): ConstantState? { вернуть drawable.constantState } переопределить fun setAlpha(alpha: Int) { drawable.alpha = альфа } переопределить fun setColorFilter(colorFilter: ColorFilter?) { drawable.colorFilter = цветной фильтр } переопределить удовольствие getOpacity(): Int { вернуть drawable.alpha } переопределить fun draw(canvas: Canvas) { drawable.draw(холст) } переопределить удовольствие getIntrinsicWidth(): Int { вернуть drawable.bounds.width() } переопределить удовольствие getIntrinsicHeight(): Int { вернуть drawable.bounds.height() } } В приведенном ниже коде мы дважды меняем цвет курсора: один раз на Color.RED и второй раз на Color.BLUE, теперь мы должны ожидать, что СИНИЙ курсор. Но проблема в том, что как только textCursorDrawable установлен, мы не можем его изменить, даже если попытаемся обнулить его.

class MainActivity : AppCompatActivity() { переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView (R.layout.activity_main) val text = findViewById(R.id.editText) если (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // устанавливаем цвет курсора на КРАСНЫЙ text.textCursorDrawable = WrapDrawable(Color.RED).apply { setBounds(0, 0, 5, text.lineHeight) } // устанавливаем цвет курсора СИНИЙ !!! НЕ РАБОТАЕТ !!! text.textCursorDrawable = WrapDrawable(Color.BLUE).apply { setBounds(0, 0, 5, text.lineHeight) } } } }
Изображение

Итак, мой вопрос: как мы можем переназначить значение textCursorDrawable несколько раз?
Я нашел обходной путь, обновив уже существующее значение textCursorDrawable и изменив ColorDrawable с помощью переменной цвета.
класс MainActivity : AppCompatActivity() { переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView (R.layout.activity_main) val text = findViewById(R.id.editText) если (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // устанавливаем цвет курсора на КРАСНЫЙ text.textCursorDrawable = WrapDrawable(Color.RED).apply { setBounds(0, 0, 5, text.lineHeight) } // устанавливаем цвет курсора СИНИЙ text.textCursorDrawable?.let { если (это WrapDrawable) { it.color = Цвет.СИНИЙ it.setBounds(0, 0, 5, text.lineHeight) } } } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ввод игры с помощью тонкой курсора/каретки не переходит к следующему слову
    Гость » » в форуме Javascript
    0 Ответы
    43 Просмотры
    Последнее сообщение Гость
  • Как контролировать размер курсора/каретки с помощью CSS
    Anonymous » » в форуме CSS
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Изменить цвет курсора при наведении курсора в CSS [дубликат]
    Anonymous » » в форуме CSS
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Изменить цвет курсора при наведении курсора в CSS [дубликат]
    Anonymous » » в форуме CSS
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Задержка перехода не сбрасывается при наведении курсора, если цвет перехода такой же, как исходный цвет.
    Anonymous » » в форуме CSS
    0 Ответы
    57 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»