Объединить 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>