Android TextView SetText () останавливает выделение другого TextView - обходной путь? - PullRequest
3 голосов
/ 12 февраля 2011

Я сейчас играю с функцией выделения в Textview для Android.Но есть проблема - у меня есть макет, содержащий несколько TextView.На одном из них, который показывает название музыкального файла, я хочу применить функцию выделения.С другой стороны, я продолжаю обновлять текущее время трека (каждую секунду).

Проблема в том, что каждый раз, когда TextView, который показывает время трека, обновляется (setText ()), выделение другого TextView останавливается.Я думаю, это потому, что setTExt () перемещает фокус на TextView, к которому я применяю текст.

Есть ли решение для этого?

Я использовал собственный класс для выделения TextViewиз этого учебного пособия

Существует ли возможность (возможно, и пользовательский класс) для другого TextView не "красть" фокус?

Спасибо!

Привет

Ответы [ 6 ]

4 голосов
/ 12 февраля 2011

Marquee включается, когда TextView имеет значение setEnabled (true) или получает фокус. Используйте setEnabled (true), чтобы другие TextView не останавливали выделение при перемещении фокуса.

3 голосов
/ 22 ноября 2012

В моем случае setEnabled(true) не помогла.Ни запроса фокуса, ни чего-либо в этом роде, потому что с фокусом проблем не было.Я считаю, что marquee также перезапускается всякий раз, когда TextView проходит через onLayout().

. В моем случае TextView находился внутри LinearLayout с layout_height="wrap_content".TextView, показывающий время трека, был ниже TextView с выделением.Теперь, когда каждую секунду я обновлял нижний TextView, я полагаю, что ОС вычисляла его высоту с нуля, а также вычисляла высоту всего LinearLayout на основе высоты TextView (которая, конечно, всегда была одинаковой).Вот почему весь LinearLayout (и его дочерние элементы) получал onLayout(), который перезапускал выделение.

Короче говоря, я установил высоту моего контейнера LinearLayout на фиксированное значение, и выделение начало работать.1009 *

3 голосов
/ 26 сентября 2012

Но есть проблема - у меня есть макет, содержащий несколько TextView. Я нашел решение здесь: http://androidbears.stellarpc.net/?p=185

Вы должны расширить класс TextView и переопределить несколько методов

@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
    if(focused)
       super.onFocusChanged(focused, direction, previouslyFocusedRect);
}



@Override
public void onWindowFocusChanged(boolean focused) {
    if(focused)
       super.onWindowFocusChanged(focused);
}

@Override
public boolean isFocused() {
       return true;
}
1 голос
/ 12 декабря 2012

Смотрите мой ответ здесь: https://stackoverflow.com/a/13841982/1823503

Идея такова:

  • для программной фиксации ширины и высоты
  • , чтобы установитьSelected
  • для переопределения вашего TextView для устранения проблем с фокусировкой
1 голос
/ 12 февраля 2011

Вы можете просто requestFocus (); вернуться в TextView, который вы хотите выделить, после обновления новой музыки TextView.Если вы не можете этого сделать, опубликуйте некоторый код, который мы можем помочь.

0 голосов
/ 01 августа 2016

Вы можете просто обернуть выделенное TextView с помощью LinearLayout

...