2015-07-23 3 views
0

Я много часов боролся, чтобы заставить этот макет работать.Каков наилучший способ создания этого макета в Android?

enter image description here

Вот мой код:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:orientation="horizontal" 
    tools:context=".MainPreviewActivity"> 

    <fragment 
     android:name="com.apps.foo.CleanPreviewFragment" 
     android:id="@+id/clean_preview_fragment" 
     android:layout_weight="0.5" 
     android:layout_width="0dp" 
     android:layout_height="match_parent"> 
    </fragment> 

    <fragment 
     android:name="com.apps.foo.pointop.DirtyPreviewFragment" 
     android:id="@+id/filters_fragment" 
     android:layout_weight="0.5" 
     android:layout_width="0dp" 
     android:layout_height="match_parent"> 
    </fragment> 

    <fragment 
     android:name="com.apps.foo.pointop.ProcessedPreviewFragment" 
     android:id="@+id/processed_preview_fragment" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent"> 
    </fragment> 

</LinearLayout> 

Каждый фрагмент представляет собой простой RelativeLayout (все они имеют один и тот же вид):

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.apps.<whatever the fragment name is>"> 
</RelativeLayout> 

Теперь я хочу заставить его работать, как это :

  • 1) Нет вложенная layout_weight

  • 2) Нет Вложение вообще (например, гнездо 2 первых фрагментов и т.д. и т.д.)

  • 3) Не используя код, чтобы сделать это программным способом после того, как точка зрения визуализации ,

На мой взгляд чистейшая наиболее читаемый способ сделать это, было бы установить ориентацию фрагмента 1 и фрагмент 2 к горизонтали, и фрагмент 3 к вертикали, но он не работает.

Я также проверил this answer, , но парень использует layout_weight с RelativeLayout. RelativeLayouts игнорируют весы, это не сработает.

Любая помощь будет оценена по достоинству?

ответ

2

Вы можете добавить фиктивный вид 0dp ширины и высоты в центре макета с помощью RelativeLayout и расположить фрагменты соответственно:

<RelativeLayout 
    ... > 

    <View 
    android:id="@+id/center_anchor" 
    android:layout_width="0dp" 
    android:layout_height="0dp" 
    android:layout_centerInParent="true" /> 

    <fragment 
    android:layout_toLeftOf="@id/center_anchor" 
    android:layout_above="@id/center_anchor" 
    ... /> 

    <fragment 
    android:toLeftOf="@id/center_anchor" 
    android:layout_below="@id/center_anchor" 
    ... /> 

    <fragment 
    android:toRightOf="@id/center_anchor" 
    ... /> 

</RelativeLayout> 
+0

да, но как я уже упоминал, что использует «андроид: layout_weight =» 1 "" в relative_layout. Разве это не против правил? RelativeLayouts игнорируют вес? Так почему же он даже работает на этого парня? –

+2

'RelativeLayout' имеет' LinearLayout' в качестве родителя, поэтому 'layout_weight' будет работать. Это родительское представление действует на вес, а 'LinearLayout' действительно поддерживает его. – nhaarman

+0

Пожалуйста, смотрите здесь http://stackoverflow.com/a/14009266/990194. Еще один вопрос, имеет значение, каковы мои макеты фрагментов? –

Смежные вопросы