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

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

4 ответов


удалить android:layout_weight="1" линии с обеих кнопок.
добавить android:minWidth="50dp" и android:layout_width="wrap_content"

EDIT:

вам нужно рассчитать размеры кнопок вручную в зависимости от размера экрана. Сначала вам нужно установить стандартный размер экрана. Например, если вы разрабатываете приложение на ширине экрана 400px, а кнопка имеет ширину 100px, то формула для поддержания того же button width to screen width соотношение на всех устройствах будет следующим

 DisplayMetrics metrics = new DisplayMetrics();
 getWindowManager().getDefaultDisplay().getMetrics(metrics);
 buttonWidth = 100 * (metrics.widthPixels/400); 

случае использовать :
если ширина экрана = 480px, то ширина кнопки должна быть 120px.


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


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


ширина / высота, похоже, всегда должны быть установлены вместе.. Это работает на мой взгляд

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