Объедините layout_weight и maxWidth для представлений - PullRequest
11 голосов
/ 09 июня 2011

Я пытаюсь сделать мои макеты более удобными для ландшафта, и у меня есть общий шаблон - добавить LinearLayout с некоторыми кнопками (например, OK | Отмена) и просто установить значение для layout_weight, чтобы пространство распределяется равномерно Проблема в том, что когда вы используете телефон или (особенно) планшет в ландшафтном режиме, вы получаете огромные кнопки, которые выглядят нелепо. Я попытался установить maxWidth на кнопках и на линейном расположении, но безрезультатно. Какой самый простой способ добиться этого? А именно, установка максимального горизонтального размера для вида, чтобы он не увеличивался по всей ширине. Я пробовал кучу разных вещей, но ничего не получалось.

Вот пример макета:

    <LinearLayout 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:gravity="center_horizontal"
      android:paddingLeft="10dp"
      android:paddingRight="10dp"
      android:paddingTop="6dp"
      android:paddingBottom="6dp">
      <Button 
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:enabled="false"
        android:textStyle="bold"
        android:text="@string/button1" />
      <Button 
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/button2" />
    </LinearLayout>

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

Ответы [ 3 ]

1 голос
/ 09 июня 2011

Поработав с относительными раскладками, я наткнулся на этот ответ , которым я и воспользовался.

0 голосов
/ 20 мая 2015
<RelativeLayout
   android:id="@+id/rlMain"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_marginLeft="12dp"
   android:layout_marginRight="12dp">

    <View
      android:id="@+id/vCenter"
      android:layout_width="0dp"
      android:layout_height="0dp"
      android:layout_centerHorizontal="true"
      android:layout_marginRight="5dp"
      android:layout_marginLeft="5dp"/>

    <Button
     android:id="@+id/btnOne"
     android:layout_width="wrap_content"
     android:layout_height="40dp"
     android:layout_toLeftOf="@id/vCenter"
     <!--Change this for different widths-->
     android:minWidth="200dp"/>

    <Button
     android:id="@+id/btnTwo"
     android:layout_width="wrap_content"
     android:layout_height="40dp"
     android:layout_toRightOf="@id/vCenter"
     <!--Change this for different widths-->
     android:minWidth="200dp"/>
</RelativeLayout>
0 голосов
/ 09 июня 2011

У меня нет Eclipse, чтобы проверить его, но вместо этого я бы использовал RelativeLayout, что-то вроде:

<RelativeLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  >
  <View
    android:id="@+id/centerView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    />
  <Button 
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/centerView"
    android:enabled="false"
    android:textStyle="bold"
    android:text="@string/button1" 
    />
  <Button 
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/centerView"
    android:text="@string/button2" 
    />
</RelativeLayout>

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

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

...