Подтвердить что ты не робот

Почему 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>

Почему и как обходиться с этим (по-видимому, сумасшедшим) ограничением?

4b9b3361

Ответ 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 кнопки)