2013-07-16 4 views
2

Im пытается сделать что-то похожее на это - Android Layout(User Interface) только я хочу сделать первый столбец с весом 4 второго с весом 2 (а также с двумя рядами) и последним с весом 1 (а также с тремя рядами) ... проблема в том, что она беспорядочна (я скопировал и вставил ответ и изменил все в соответствии с моими потребностями, но он продолжает перепутаться .. =) любую помощь? [код]Создание linearlayout с весами

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/background_color" 
    android:orientation="vertical" 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" 
     android:gravity="center_horizontal|center_vertical" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/textDishes" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="20dp" 
      android:text="@string/dishes" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageDishes" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

    <View 
     android:layout_width="fill_parent" 
     android:layout_height="@dimen/seperator_size" 
     android:background="@color/seperator" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:measureWithLargestChild="true" 
     android:orientation="horizontal" 
     android:weightSum="2" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_horizontal" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/textfood" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/food" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <ImageView 
       android:id="@+id/imagefood" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 
     </LinearLayout> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="@dimen/seperator_size" 
      android:background="@color/seperator" /> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_horizontal" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/textMalls" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/malls" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <ImageView 
       android:id="@+id/imageMalls" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 
     </LinearLayout> 
    </LinearLayout> 

    <View 
     android:layout_width="fill_parent" 
     android:layout_height="@dimen/seperator_size" 
     android:background="@color/seperator" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:weightSum="3" 
     android:orientation="horizontal" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_horizontal" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/textView1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/app_name" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <ImageView 
       android:id="@+id/imageView1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 
     </LinearLayout> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="@dimen/seperator_size" 
      android:background="@color/seperator" /> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_horizontal" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/coupons" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <ImageView 
       android:id="@+id/imageView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 
     </LinearLayout> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="@dimen/seperator_size" 
      android:background="@color/seperator" /> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_horizontal" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/textView3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/markets" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <ImageView 
       android:id="@+id/imageView3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 
     </LinearLayout> 
    </LinearLayout> 

</LinearLayout> 
[/code] 

То есть результат -

enter image description here

Результат должен выглядеть - enter image description here Любая помощь ??

ответ

2

EDIT рабочий пример Теперь

Это не полный ответ, так как вертикальные разделители до сих пор не работает, но, надеюсь, он получает вы идете в правильном направлении:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="4" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textDishes" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Dishes" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <ImageView 
     android:id="@+id/imageDishes" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 
</LinearLayout> 

<View 
    android:layout_width="match_parent" 
    android:layout_height="5dp" 
    android:background="@color/red" /> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="2" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textfood" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Food" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imagefood" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

    <View 
     android:layout_width="5dp" 
     android:layout_height="fill_parent" 
     android:background="@color/red" 
     android:gravity="center" > 
    </View> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textMalls" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Malls" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageMalls" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 
</LinearLayout> 

<View 
    android:layout_width="match_parent" 
    android:layout_height="5dp" 
    android:background="@color/red" /> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="App name" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

    <View 
     android:layout_width="5dp" 
     android:layout_height="fill_parent" 
     android:background="@color/red" 
     android:gravity="center" > 
    </View> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Coupons" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

    <View 
     android:layout_width="5dp" 
     android:layout_height="fill_parent" 
     android:background="@color/red" 
     android:gravity="center" > 
    </View> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Markets" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 
</LinearLayout> 

enter image description here

+0

Если бы вы были рядом со мной, я бы поцеловал вас! ... tnx alot bro .. !! – crazyPixel

0

Я не уверен, если это ваша единственная проблема, но при использовании weight ваш layout_width должен быть «0dp» для горизонтальной ориентации и layout_height должны быть «0dp» для вертикальной ориентации. Так, например, ваш первый ребенок должен быть

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="4" 
    android:gravity="center_horizontal|center_vertical" 
    android:orientation="horizontal" > 

, потому что он принадлежит к родителю LinearLayout кто есть orientation является vertical

Update

Нечто подобное вы должны получить очень близко. Обратите внимание, я должен был взять ваши ресурсы, чтобы заставить его работать в моем редакторе, так что вы просто должны положить их обратно в

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical"> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="4" 
    android:gravity="center_horizontal|center_vertical" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/textDishes" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="20dp" 
     android:text="Dishes" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <ImageView 
     android:id="@+id/imageDishes" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 
</LinearLayout> 

<View 
    android:layout_width="fill_parent" 
    android:layout_height="1dp" /> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="2" 
    android:measureWithLargestChild="true" 
    android:orientation="horizontal" 
    android:weightSum="2" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textfood" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Food" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imagefood" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

    <View 
     android:layout_width="1dp" 
     android:layout_height="fill_parent" /> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textMalls" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Malls" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageMalls" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 
</LinearLayout> 

<View 
    android:layout_width="fill_parent" 
    android:layout_height="1dp" /> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:weightSum="3" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="App name" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

    <View 
     android:layout_width="fill_parent" 
     android:layout_height="1dp" /> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Coupons" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

    <View 
     android:layout_width="fill_parent" 
     android:layout_height="1dp" /> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center_horizontal" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Markets" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 
</LinearLayout> 

+0

Btw благодарю вас за ваш тест. Я очень ценю это. – crazyPixel

+0

Как он напортачиться? Когда я использовал этот код, он выглядел так же, как без разделителей. Возможно, вы захотите попробовать очистить свой проект ... Project -> Clean – codeMagic

+0

Проблема возникает, как только вы добавляете один из вертикальных разделителей. в этом примере также есть несколько ошибок, первый LL должен быть верным, а не горизонтальным, а некоторые из разделителей имеют ширину и высоту. – invertigo

2

Я не уверен, если это была просто ошибка, когда вы включили ваш XML здесь, но вам не хватает «>» после родительского LinearLayout.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@color/background_color" 
android:orientation="vertical" 

Должен быть

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@color/background_color" 
android:orientation="vertical" > 

Кроме того, вы используете вес в некоторых детях этого родительского компоновщика, но вы не указали в общих сложностях weightSum в родительском LinearLayout. Помните, что weightSum - это общий вес, который должен распределяться среди детей, поэтому их вес должен составлять до этого weightSum. Кроме того, только голова, но использование вложенных весов (которые вы будете делать, если вы добавите это) плохо для производительности.

Возможно, лучшим решением вашей проблемы будет изучение другого варианта макета вместо использования LinearLayout? Однако вы можете заставить его работать таким образом. Создайте родительский weightSum 7 и убедитесь, что вы распространяете его по желанию для детей.

В соответствии с вашим изображением (и с использованием линейных макетов), он должен выглядеть примерно так, я думаю:

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

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

// This one's child here - it has weight 1. 

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

// This one's children here - they both have weight 1. 

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:weightSum="3" 
    android:weight="1" > 

// This one's children here - they all have weight 1. 

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

+1

weightSum не требуется – invertigo

+0

@invertigo - ах, да, вы правы, человек. Он просто примет weightSum на основе назначенных весов. Я просто привык бросать weightSum, но хороший звонок! – KurayamiShikaku