2017-01-15 4 views
-1

Я читаю книгу о Android и я застрял здесьстранное поведение, используя LinearLayout и расположение: вес

Вот инструкции:

  1. Используйте реальный проект UI мы недавно создали, но давайте начните с полностью чистого листа . Щелкните правой кнопкой мыши папку макета в проекте explorer. В контекстно-зависимом меню параметров выберите «Создать | Файл ресурсов макета.
  2. Убедитесь, что для элемента Root выбран LinearLayout.
  3. Назовите файл list_detail_layout, затем щелкните левой кнопкой мыши OK.
  4. В окне «Свойства» найдите свойство ориентации LinearLayout, которое предоставляется по умолчанию, и измените его на горизонтальное.
  5. Перетащите LinearLayout (по вертикали) на дизайн.
  6. Теперь перетащите LinearLayout (горизонтальный) на дизайн
  7. Выберите первый (по вертикали) LinearLayout в корневом LinearLayout, найти его расположение: свойство веса, и установить его на 40. Установите его фон в цвет ваш выбор путем поиска и щелчка левой кнопкой мыши по эллипсам свойства фона ..., , затем щелкните левой кнопкой мыши по вкладке «Цвет» и выберите цвет.
  8. Выберите второй (горизонтальный) LinearLayout в корне LinearLayout, , найдите его макет: весовое свойство и установите его на 60. Теперь у нас есть две заметные области экрана: одна занимает 40%, другая 60 %, , как показано ниже:

Screen Shot enter image description here Я следую за все шаги, но я до сих пор не получить результат изображения. Это мой XML-код:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="40" 
     android:background="@android:color/holo_orange_light"></LinearLayout> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="60"></LinearLayout> 
</LinearLayout> 

Если изменить оба layout_width значения в «wrap_content» она работает, но я не знаю, почему не упоминается в книге ...

+0

вам нужно назначить сумму веса. если весовая сумма = 1, то 40 процентов от нее .40 –

+0

Вы не указали weight_sum на родительском макете –

ответ

0

Атрибут android:layout_weight рассказывает LinearLayout как распределить своих детей. Если вы дадите обоим виджетам одинаковое значение, но это не обязательно сделает их одинаковой шириной на экране. Чтобы определить ширину его дочерних представлений, LinearLayout использует смесь параметров layout_width и layout_weight.

LinearLayout делает два прохода, чтобы установить ширину вида. В первом проходе LinearLayout смотрит на layout_width (или layout_height, для вертикальной ориентации). Если значение для layout_width для обоих LinearLayout равно wrap_content, тогда для каждого представления будет достаточно места для рисования.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:orientation="horizontal" 
android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_weight="40" 
    android:background="@android:color/holo_orange_light"></LinearLayout> 
<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_weight="60"></LinearLayout> 
</LinearLayout> 

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

0

Вы должны использовать weightSum в родительском.

Это должно выглядеть

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent 
    android:weightSum="100"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="40" 
     android:background="@android:color/holo_orange_light"></LinearLayout> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="60"></LinearLayout> 
</LinearLayout> 
+0

Не работает. Первый макет выглядит больше, чем второй макет. Нет необходимости назначать период раньше, а также андроид: weightSum = "100", то же поведение pd: sorry my english –

+0

Попробуйте изменить layout_width как в дочерних линейных макетах, так и в wrap_content. –

+0

Да, я упомянул об этом. Но это странно, потому что в книге не упоминается, что бы это ни было ... Это решительно, спасибо всем. –

0

При использовании андроида: layout_weight убедитесь, либо у вас есть андроида: weightSum набор в родительском LinearLayout или установить андроида: layout_width = 0

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="40" 
     android:background="@android:color/holo_orange_light"> 
    </LinearLayout> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="60"> 
    </LinearLayout> 
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="100"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="40" 
     android:background="@android:color/holo_orange_light"></LinearLayout> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="60"></LinearLayout> 
</LinearLayout> 
Смежные вопросы