Макет внутри horizontalScrollView, который является размером экрана

Я новичок в android и искал решение для этого, но пока не повезло. Я хотел бы создать макет, что-то вроде изображения ниже.

Я хотел бы иметь linearLayout, который является размером экрана. Затем у вас есть еще один linearLayout, который также является размером экрана, но с экрана. Затем я могу прокручивать между двумя виртуальными "экранами".

введите описание изображения здесь

Есть интересная статья, в которой объясняется, как расширить класс scrollView, чтобы я мог получить отличный эффект привязки, поэтому, если я смогу заставить это работать, мое приложение будет очень похоже на прокрутку между домашними экранами.

Я читал о весах, а также о scrollView fillViewport = "true". Я боюсь, что я не понимаю, как это можно использовать с horizontalScrollView, чтобы линеарные заливки заполняли экран. Я попытался использовать всевозможные комбинации fill_parent и wrap_content, но безрезультатно.

Как я вижу, эта функциональность не повредит переносимости приложения между устройствами, которые имеют разные экраны, пока я создаю вспомогательные представления (элементы на каждом "экране" ) с учетом изменчивости экрана.

Вот простой пример XML, который я пытался:

<HorizontalScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/HorizontalScrollView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true">

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/txtTestBox"
            >
        </EditText>
    </LinearLayout>

    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Button 1"
        />

    </LinearLayout>

</LinearLayout>

</HorizontalScrollView>

К сожалению, это даже не приближается к тому, что я ищу. Надеюсь, это можно сделать...

Спасибо за любую помощь или предложения.

Ответ 1

Горизонтальное представление прокрутки может масштабироваться бесконечно бок о бок, поэтому "Fill Parent" скорее всего не будет работать так, как вы ожидаете от внутренних макетов. Вы пытались явно указать ширину внутренних макетов?

Что-то вроде:

<HorizontalScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/HorizontalScrollView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true">

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="400dp"
    android:layout_height="fill_parent">

.....

</LinearLayout>


</HorizontalScrollView>

Ответ 2

Есть ли конкретная причина, по которой вам нужно иметь практически 2 экрана внутри одного? Почему бы просто не разделить их? Вы можете расширить GestureDetector, чтобы при появлении жестов прокрутки он автоматически "привязывался" к следующему экрану.

Ответ 3

См. здесь. Решение заключалось в использовании android:fillViewport="true" в ScrollView. не нужно исправлять ширину LinearLayout.

     <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:fillViewport="true"
            android:orientation="vertical"
            android:scrollbars="none">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                //create your views
            </LinearLAyout>
</HorizontalScrollView>