textIsSelectable не работает с downndantFocusability = blocksDescendants - PullRequest
0 голосов
/ 08 января 2019

У меня была проблема, что мой ScrollView во фрагменте автоматически прокручивался вниз. Таким образом, чтобы исправить эту проблему, я добавил следующую строку в RelativeLayout, как предложено в this answer:

android:descendantFocusability="blocksDescendants"

Но после добавления этой строки textIsSelectable перестает работать. Как я могу добавить обе строки?

Вот XML:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="blocksDescendants">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:textSize="23sp"
        android:text="The Beach Beneath the Street"
        android:fontFamily="sans-serif-medium"
        android:textColor="@color/black"
        android:textIsSelectable="true"/>

    <TextView
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title"
        android:padding="15dp"
        android:fontFamily="sans-serif-condensed"
        android:lineHeight="25dp"
        android:lineSpacingMultiplier="1"
        android:lineSpacingExtra="6dp"
        android:textSize="16sp"
        android:text="Never add a RecyclerView or ListView to a scroll view"
        android:textIsSelectable="true" />

</RelativeLayout>

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Во-первых, убедитесь, что для вашего Относительного макета, который содержит ваш TextView, установлено значение DesndantFocusability, равное «До потомков», для фокуса можно установить значение «истина», а для параметра focusableInTouchMode - значение «истина». Затем добавьте onTouchListener к вашему ScrollView, который удаляет фокус из ваших TextViews при каждом касании, например так:

ScrollView scroll = (ScrollView)findViewById(R.id.myscrollView);
scroll.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (myTextView1.hasFocus()) {
            myTextView1.clearFocus();
        }
        if (myTextView2.hasFocus()) {
            myTextView2.clearFocus();
        }
        return false;
    }
});
0 голосов
/ 28 января 2019

Одним из возможных подходов является использование метода fullScroll. Согласно документации

public boolean fullScroll (int direction)

Управляет прокруткой в ​​ответ на нажатие клавиши «дом / конец». Этот метод прокручивает вид сверху или снизу и фокусируется на самом верхнем / самом нижнем компоненте в новой видимой области. Если ни один из компонентов не является подходящим кандидатом для фокусировки, этот просмотр прокрутки восстанавливает фокус.

int direction: направление прокрутки: View.FOCUS_UP для перехода в верхнюю часть представления или View.FOCUS_DOWN для перехода в нижнюю часть

Следовательно, вы должны удалить

android:descendantFocusability="blocksDescendants"

и добавить следующие строки

XML :

android:id="@+id/myScrollView"

JAVA :

myScrollView = (ScrollView)findViewById(R.id.myScrollView);
myScrollView.fullScroll(View.FOCUS_UP);
0 голосов
/ 22 января 2019

Когда вы используете android:descendantFocusability="blocksDescendants" в ViewGroup, он блокирует все дочерние виды от получения фокуса

Для получения дополнительной информации, пожалуйста, ознакомьтесь с документами

  • android:descendantFocusability

    Определяет отношения между ViewGroup и ее потомками при поиске представления, чтобы сфокусироваться.

Должно быть одним из следующих постоянных значений в android:descendantFocusability.

  1. afterDescendants: - ViewGroup получит фокус, только если никто из его потомков не захочет этого.
  2. beforeDescendants: - ViewGroup получит фокус перед любым из его потомков.
  3. blocksDescendants: - ViewGroup заблокирует своих потомков от получения фокуса.

Теперь ваш вопрос

Но после добавления этой строки textIsSelectable перестает работать. Как я могу добавить обе строки?

AFAIK вы не можете использовать оба вместе

Вам нужно найти альтернативное решение для вашей проблемы автопрокрутки до дна во фрагменте

Вот несколько ссылок, которые могут помочь вам в вопросе автоматической прокрутки вниз во фрагменте

...