HorizontalScrollView не полностью прокручивается вправо

Моя текущая реализация

У меня есть HorizontalScrollView, который я создаю в XML, в котором размещаются несколько дочерних элементов LinearLayout. Я добавил этот код ниже.

Есть два контейнера LinearLayout с идентификаторами group_one и group_two, которые заполняются программно во время выполнения.

Я также исправляю ширину HorizontalScrollView во время выполнения в зависимости от количества объектов View, которые я буду вставлять.

Это решение отлично работает, когда дети помещаются в HorizontalScrollView без необходимости прокрутки.

Проблема

Как только мне нужно прокрутить (есть больше дочерних элементов, чем может быть отображено в пределах фиксированной ширины HorizontalScrollView), полоса прокрутки не будет полностью вправо, хотя я вижу, что дочерний макет имеет правильную ширину, и я вижу полоса прокрутки просто не пойдет дальше.

Мой вопрос

Почему существует ограничение на перемещение полосы прокрутки вправо?

Мой код

XML-файл HorizontalScrollView

<!-- THIS IS WHERE THE PLUGIN BUTTONS ARE HOUSED -->
    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="horizontal"
        android:id="@+id/map_plugin_scroll_view"
        android:background="@color/map_plugin_background">

    <!-- Enclosing box to layout the two groups.-->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_margin="8dp"
        android:id="@+id/group_container">

        <!-- These layouts contain the map plugins. -->
        <LinearLayout
            android:id="@+id/group_one"
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"/>

        <LinearLayout
            android:id="@+id/group_two"
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dp"/>

    </LinearLayout>

</HorizontalScrollView>

Что происходит

Это изображение правильной прокрутки влево. Край прокрутки начинается справа от красной полосы. Обратите внимание на расстояние между ними.

Правильная прокрутка влево

Это изображение неправильной прокрутки вправо. Сравните расстояния между краями прокрутки и местами, где полоса прокрутки останавливается.

Неправильная прокрутка вправо

Вот как я хочу, чтобы это выглядело, когда я прокручиваю с обоих концов.

Правильный макет


person StuStirling    schedule 31.07.2014    source источник


Ответы (2)


Я играл с этим некоторое время и, наконец, нашел решение.

Я пытался добавить левое и правое поля к LinearLayout с идентификатором group_container. Однако по какой-то причине HorizontalScrollView не соблюдал это, и поэтому я видел эту проблему.

Вместо этого я добавил левое и правое поля к group_one и group_two LinearLayouts. Теперь HorizontalScrollView уважает их и работает так, как я ожидал. Вот мой модифицированный код.

<HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="horizontal"
        android:id="@+id/map_plugin_scroll_view"
        android:background="@color/map_plugin_background">

        <!-- Enclosing box to layout the two groups.-->
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:id="@+id/group_container">

            <!-- These layouts contain the map plugins. -->
            <LinearLayout
                android:id="@+id/group_one"
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="4dp"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"/>

            <LinearLayout
                android:id="@+id/group_two"
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="4dp"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"/>

        </LinearLayout>

    </HorizontalScrollView>
person StuStirling    schedule 12.08.2014
comment
О боже, я был близок к тому, чтобы потерять голову с ScrollView, я никогда не ожидал, что есть HorizontalScrollView... - person IgniteCoders; 16.05.2018

установите отступы прямо на ваш прокрутку следующим образом:

android:paddingRight="20dp"
person meysam    schedule 31.07.2014
comment
Это просто добавляет разрыв между содержимым дочернего элемента и представлением прокрутки. Все еще вижу ту же проблему - person StuStirling; 01.08.2014