Как установить вид за пределы экрана в сложном дереве макета?

Я дал следующую структуру макета для планшетного приложения:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clipChildren="false" >

<LinearLayout
    android:id="@+id/placeholderForLeftFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false" >

    <RelativeLayout
        android:id="@+id/placeholderFragmentHomeScreen"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="32" >
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/dummy"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="69"
        android:background="#0000" >
    </RelativeLayout>
</LinearLayout>


<LinearLayout
    android:id="@+id/mainLinearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:clipChildren="false" >

    <RelativeLayout
        android:id="@+id/invisbleRelativeLayout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="32"
        android:background="#0000" >
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/placeholderFragmentHotelResultList"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="42"
        android:background="#F0FFFF" >
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/placeholderFragmentHotelDetailScreen"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="26" >
    </RelativeLayout>
</LinearLayout>

Первый LinearLayout содержит только фрагмент с левой стороны и не может быть перемещен. Второй LinearLayout имеет вначале невидимый элемент, который уменьшается, когда я смахиваю два других R.Layouts влево, и увеличиваю, когда я делаю глоток назад. RelativeLayout в середине сохраняет его ширину все время, и я могу провести 2-й и 3-й поверх первого LinearLayout. На самом деле 2-й и 3-й R.Layout должны иметь одинаковую ширину, но третий должен быть виден только на границе экрана до 26%.

Теперь я хочу, чтобы 3-й R.Layout имел такую ​​же ширину, как и 2-й с начала (сразу после запуска приложения), и его позиция наполовину за кадром. Я попытался создать макет, ширина которого равна сумме всех трех R.Layouts, и поместить в него макеты, но это не сработало - я вижу только элементы из первого LinearLayout. Когда я использую атрибут веса, как в приведенном выше коде, третий R.Lay растягивается, и это именно то поведение, которого я стараюсь избегать. И когда я устанавливаю Margin_right в отрицательное значение, ничего не происходит.

Я ценю любые мысли и идеи. Спасибо!

1 ответ

Я нашел следующее решение, которое отлично работает для меня.

<LinearLayout
    android:id="@+id/mainLinearLayout"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:clipChildren="false"
    android:weightSum="100" >

    <RelativeLayout
        android:id="@+id/invisbleRelativeLayout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="32"
        android:background="#0000" >
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/placeholder1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="43"
        android:background="#F0FFFF" >
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/placeholder2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="43"
        android:background="#F0FFFF" >
    </RelativeLayout>
</LinearLayout>

Обратите внимание, что сумма весов из трех макетов больше, чем 100 в верхнем LinearLayout.

Другие вопросы по тегам