Почему maxWidth на кнопке не работает и как ее обойти? - PullRequest
12 голосов
/ 26 августа 2011

У меня есть две кнопки на макете, и на устройстве с большим экраном (планшетах) я хочу ограничить их ширину, чтобы они не выглядели смешными.Я ожидал использовать атрибут 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>

Почему и как обойти это (явно безумное) ограничение?

Ответы [ 4 ]

11 голосов
/ 26 августа 2011

Удалить строку 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); 

Вариант использования:
Если ширина экрана = 480px, тогда ширина кнопки должна быть 120px.

3 голосов
/ 30 декабря 2012

Хороший способ решения этой проблемы - создать несколько макетов для разных комбинаций разрешения экрана.Когда вы достигнете максимального растяжения, создайте новый макет с фиксированным значением, где это необходимо.См. Раздел «Использование псевдонима макета» в http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters

0 голосов
/ 06 октября 2012

Ширина / Высота, кажется, всегда должны быть установлены вместе, .. На мой взгляд, это работает

        <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 кнопки)

0 голосов
/ 26 августа 2011

Попробуйте установить layout_width в wrap_content против 0dp.

...