0

У меня возникли проблемы с LinearLayout и весами в Android. Я хочу, чтобы горизонтальная LinearLayout удерживала 2 вертикальных LinearLayouts, разделенных одним представлением с 9 патч-фоном, чтобы быть разделителем между двумя вертикальными LinearLayouts. Как это: (наружная коробка наружная LinearLayout и средняя двойная линия мой 9 патча разделитель.)Android LinearLayout и вес проблема

---------------------------- 
| one || three | 
| two || four  | 
---------------------------- 

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="2" >  
    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:gravity="center_horizontal" 
     android:layout_weight="1" > 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="one" /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="two" /> 
    </LinearLayout> 

    <View 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:background="@drawable/divider_vertical" 
     android:layout_weight="0" /> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:gravity="center_horizontal" 
     android:layout_weight="1" > 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="three" /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="four" /> 
    </LinearLayout> 

</LinearLayout> 

Что я здесь делаю неправильно? Я не могу понять всю жизнь, почему средний вид занимает все пространство, не оставляя ни одного для второго внутреннего LinearLayout ... Я могу заставить его работать, если я укажу конкретную ширину px или dp для 9 -patch, но я действительно хочу, чтобы он работал без указания этой ширины. Таким образом, если я решит изменить мой 9-патч, я не буду вручную обновлять ширину.

+0

имеют u получил решение или все тот же вопрос – Developer

+0

Пробовали ли вы, чтобы делитель увидел полную ширину? Скажите 10dp или что-то еще? – dumazy

+0

Да. давая делителю реальную ширину, решает проблему, но я ищу решение, которое не связано с этим. См. Мое обновление к моему оригинальному сообщению. – user1567019

ответ

1

Попробуйте этот макет

Изменено Разметка

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="one" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="two" /> 
</LinearLayout> 

<View 
    android:layout_width="1dp" 
    android:layout_height="88dp" 
    android:background="@android:color/darker_gray" /> 

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="three" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="four" /> 
</LinearLayout> 

+0

Это работает (указав конкретную макетную ширину), но я бы предпочел не указывать эту ширину, если я решил использовать другой drawable 9-patch в качестве моего разделителя, потому что мне пришлось бы вручную обновлять эту ширину. Я обновил это в своем первоначальном вопросе. – user1567019

+0

Я отмечу это как решение, потому что это то, с чем я пошел. Не удалось найти более удобный способ сделать это. Обратите внимание, что мне не нужно было явно устанавливать высоту разделителя, я смог оставить его в match_parent.Кроме того, я использовал размер для layout_width, где у меня было точное значение пикселя для ширины разделителя, так как у меня на самом деле есть разные объекты изображения для этого разделителя для разных разрешений экрана (а также разные значения пикселей для этого размера для разных разрешений экрана также). – user1567019

0

Updtae здесь и попробовать

<View 
     android:layout_width="match_parent" 
     android:layout_height="2dp" 
     android:background="@drawable/divider_vertical" 
/> 
0
  • Удалить weightSum="2" от родителей LinearLayout.
  • Удалить вид android:layout_weight="0" из 9 патча
+0

Я знаю, что добавление weightSum и андроида: layout_weight = "0" не нужны, но удаление их ничего не меняет – user1567019

0

Насколько велик ваш 9 патча? растяжимые области 9 патчей не усаживаются - ширина файла актива будет определять минимальное пространство, которое оно будет пытаться использовать в вашем LinearLayout.

+0

9 патчей всего 5 px на 3px. Я правильно установил 9 патчей с линиями на всех 4 краях и в соответствующих местах – user1567019

0

макет набор веса, как показано ниже

иметь в виду weightSum родителя по умолчанию он установлен в детской layout_weight сумму

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    >  
    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:gravity="center_horizontal" 
     android:layout_weight="3" > 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="one" /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="two" /> 
    </LinearLayout> 

    <View 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:background="@drawable/divider_vertical" 
     android:layout_weight="1" /> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:gravity="center_horizontal" 
     android:layout_weight="3" > 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="three" /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="four" /> 
    </LinearLayout> 

</LinearLayout> 

, конечно, вы можете поэкспериментировать со значениями для weigths

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