Как установить вид за пределы экрана в сложном дереве макета?
Я дал следующую структуру макета для планшетного приложения:
<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.