настройка ScrollingMovementMethod
дает TextView
возможность прокручивать "по своему усмотрению", например, когда вы устанавливаете действительно длинный текст, и он обрезается по низу или краю.с ScrollingMovementMethod
вы можете прокручивать TextView
, нет необходимости помещать его в прокручиваемый контейнер, например, в ScrollView
или HorizontalScrollView
android:scrollbars="vertical"
строка говорит, что ЕСЛИ View
get "scrollablility "(например, описанным выше методом перемещения), тогда пользовательский интерфейс должен показывать только vertical
полосу прокруткииз документов:
Определяет, какие полосы прокрутки должны отображаться при прокрутке или нет.
и это View
документы, а не TextView
особенно потому, что немногие расширяющиеся «виды» из View
s могут получить «прокручиваемость», включая все ViewGroup
s, такие как ScrollView
, ListView
, RecyclerView
и т. д.
и, наконец, что это за строкаделает в вашем коде?внутри setTextIsSelectable
у вас есть эта строка:
setMovementMethod(selectable ? ArrowKeyMovementMethod.getInstance() : null);
, поэтому на самом деле это метод перезаписи перемещения, который вы задали несколькими строками выше в своем собственном коде.Могу поспорить, что некоторое время назад ваш TextView
можно было прокручивать «самому по себе», и однажды какой-то умный парень переписал это и вставил TextView
, например, в ScrollView
в XML, а метод перемещения остался в коде.textIsSelectable
работает до Activity
паузы, потому что после возобновления вы (снова) устанавливаете ScrollableMovementMethod
, но внутри setTextIsSelectable
у вас есть
if (mEditor.mTextIsSelectable == selectable) return;
, вы устанавливаете этот флаг mTextIsSelectable
при первом запускедо паузы Activity
s, и этот флаг восстанавливается, поэтому приведенный ниже код не запускается (поэтому метод перемещения не переустанавливается с помощью ArrowKeyMovementMethod
и ваш ScrollableMovementMethod
остается).Так что ответьте на вопрос, что эта строка делает в вашем коде: она прерывает "возможность выбора" после приостановки и возобновления Activity
, ничего кроме этого
примечания из источников ScrollingMovementMethod
и ArrowKeyMovementMethod
: только в ArrowKeyMovementMethod
(устанавливается как метод перемещения внутри setTextIsSelectable
, как указано выше) вы переопределили метод onTouchEvent
и внутри него некоторые строки, обрабатывающие выделение
edit: примечание такжечто внутри setTextIsSelectable
у вас есть настройка «фокусируемости», поэтому эти строки не нужны:
textView.setFocusable(true);
textView.setFocusableInTouchMode(true);
, чтобы вы могли сократить код до одной строки:
textView.setTextIsSelectable(true);
или удалить всепроцитируйте Java-код и добавьте одну строку XML:
android:textIsSelectable="true"