Почему maxWidth на кнопке не работает и как его обойти?
У меня есть две кнопки на макете, а на широкоэкранном устройстве (планшетах) я хочу ограничить их ширину, чтобы они не выглядели смешно. Я ожидал использовать атрибут maxWidth, но, по-видимому, ничего не делает в моем сценарии. Здесь определение макета - кнопки используют полную ширину макета, игнорируя любое значение в maxWidth.
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxWidth="100dp"
android:text="Button 1"
/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxWidth="100dp"
android:text="Button 2"
/>
</LinearLayout>
Почему и как обходиться с этим (по-видимому, сумасшедшим) ограничением?
Ответы
Ответ 1
Удалите строку android:layout_weight="1"
с обеих кнопок.
Добавить android:minWidth="50dp"
и android:layout_width="wrap_content"
EDIT:
Вам нужно рассчитать размеры кнопок вручную в зависимости от размера экрана. Сначала вам нужно установить стандартный размер экрана. Например, если вы создаете приложение на ширине экрана 400 пикселей, а кнопка шириной 100 пикселей, то формула для поддержания того же отношения button width to screen width
на всех устройствах будет выглядеть следующим образом
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
buttonWidth = 100 * (metrics.widthPixels/400);
Случай использования:
Если ширина экрана = 480 пикселей, ширина кнопки должна быть 120 пикселей.
Ответ 2
хороший способ решить это - создать несколько макетов для разной комбинации разрешения экрана. Когда вы достигнете максимального растягивания, создайте новый макет, который имеет фиксированное значение там, где это необходимо. См. Раздел "Использование псевдонима компоновки" в http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
Ответ 3
Попробуйте установить layout_width в wrap_content против 0dp.
Ответ 4
Ширина/Высота, похоже, всегда должны быть установлены вместе. Это работает на мой взгляд.
<Button
android:text="Center"
android:layout_width="100dp"
android:layout_height="fill_parent"
android:id="@+id/selectionCenterButton"
android:minWidth="50dp"
android:minHeight="50dp"
android:maxWidth="100dp"
android:maxHeight="50dp"
android:layout_weight="1" />
Родитель кнопки настроен на обертку содержимого, поэтому масштабируется вниз, но не более 400 в ширину (4 кнопки)