Вес макета Android - PullRequest
       9

Вес макета Android

84 голосов
/ 14 февраля 2011

Я новичок в разработке для Android, и у меня есть вопрос об установке веса в линейной раскладке.

Я пытаюсь создать строку с двумя пользовательскими кнопками и пользовательским текстом редактирования. Текст для редактирования должен занимать столько же места, сколько и его содержимое, а две кнопки должны расширяться по горизонтали, чтобы заполнить оставшуюся часть свободного места в строке. Вот так ...

| [#Button++#] [#Button--#] [et] |

После нескольких попыток это самое близкое, что я могу получить к тому, что я хочу, даже если это кажется слишком сложным.

| [Button] [Button] [###ET###] |

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center_vertical"
    android:layout_weight="1"
    >

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_plus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_plus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/tv_dice_plus" 
                android:text="@string/tv_plus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_minus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_minus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/btn_minus" 
                android:text="@string/tv_minus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <EditText 
            android:textColor="#FAFAF4"
            android:text="@string/et_output" 
            android:id="@+id/et_output" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:inputType="number"
            android:selectAllOnFocus="true" 
            android:minWidth="50sp"         
            android:maxWidth="50sp"
            android:background="@drawable/tv_black_background3"
            android:textColorHighlight="#c30505"
            ></EditText>
    </LinearLayout>
</LinearLayout>

Как я понимаю, установка [android: layout_weight = "2"] для линейных макетов, содержащих кнопки, должна заставить их занимать больше места, чем текст редактирования, но для меня это противоположное, что делает их обоих вдвое меньше.

| [Btn] [Btn] [#####et#####] |

Я пробовал так много разных комбинаций, что даже не помню их, и ни одна из них не сработала.

Ответы [ 8 ]

213 голосов
/ 14 февраля 2011

Это не работает, потому что вы используете fill_parent в качестве ширины.Вес используется для распределения оставшегося пустого пространства или убирающего пространства, когда общая сумма больше чем LinearLayout.Вместо этого установите ширину 0dip , и она будет работать.

14 голосов
/ 13 сентября 2011

android:Layout_weight можно использовать, когда вы не добавляете фиксированное значение к вашей ширине, например fill_parent и т. Д.

Сделайте что-то подобное:

<Button>

Android:layout_width="0dp"
Android:layout_weight=1

-----other parameters
</Button>
7 голосов
/ 04 ноября 2011

Подумайте так, будет проще

Если у вас 3 кнопки и их веса равны 1,3,1 соответственно, это будет работать как таблица в HTML

Предоставьте 5 порций дляэта строка: 1 часть для кнопки 1, 3 часть для кнопки 2 и 1 часть для кнопки 1

3 голосов
/ 21 апреля 2014

В linearLayout установите WeightSum = 2;

И распределите вес по его дочерним элементам так, как вы хотите, чтобы они отображались. Я дал вес = "1" ребенку. Так что оба будут распределять половину от общего.

 <LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/maila_oss" />
</LinearLayout>
2 голосов
/ 30 мая 2011

весовые значения 0-1 делят распределение доступного пространства (после установки layout_width = "0px") пропорционально весовому значению.Элементы представления с не заданным весом (без ввода веса) получают вес 0, что означает, что они не получают расширения.

Простая альтернатива без ввода весов - это прикрепить область к представлению с текстом, который говорит ему расширятьсяминимум, необходимый для свободного места текста (wrap_content) EditText: android: layout_width = "wrap_content" android: ellipsize = "marquee"

0 голосов
/ 10 мая 2016
<LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="9"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/maila_oss" />
<EditText
        android:id="@+id/edittxt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/maila_oss" />
</LinearLayout>
0 голосов
/ 18 января 2014

Еще одна причина, которую я нашел (как это ни странно звучит). Ниже не работает.

LinearLayout вертикальный

LinearLayout высота fillparent + вес

LinearLayout высота fillparent + вес

LinearLayout высота fillparent + вес

EndLinearLayout

Что сработало, было

RelativeLayout

LinearLayout вертикальный

LinearLayout высота fillparent + вес

LinearLayout высота fillparent + вес

LinearLayout высота fillparent + вес

EndLinearLayout

EndRelativeLayout

Звучит расплывчато из-за корневого макета с Linear и веса под ним не работают. И когда я говорю «не сработало», я имею в виду, что после просмотра графического макета между различными разрешениями согласованность экрана сильно нарушалась.

0 голосов
/ 14 февраля 2011

я бы предположил установить ширину EditText s равной wrap_content и поместить две кнопки в LinearLayout, ширина которого fill_parent и вес установлен в 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...