Объединить layout_weight и maxWidth для просмотров

Я пытаюсь сделать мои макеты более приятными для пейзажа, и общий шаблон, который у меня есть, - добавить 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>

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

Ответ 1

У меня нет 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>

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

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

Ответ 2

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

Ответ 3

<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>