Вес планшета Android

Я новичок в разработке 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#####] |

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

Ответ 1

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

Ответ 2

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

Сделайте что-то вроде этого:

<Button>

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

-----other parameters
</Button>

Ответ 3

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

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

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

Ответ 4

В линейномLayout установите 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>

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

LinearLayout vertical

LinearLayout высота заливка + вес

     

LinearLayout высота заливка + вес

     

LinearLayout высота заливка + вес

EndLinearLayout

Что работало

RelativeLayout

LinearLayout vertical

     
  

LinearLayout высота заливка + вес

         

LinearLayout высота заливка + вес

         

LinearLayout высота заливка + вес

  
  

EndLinearLayout

EndRelativeLayout

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

Ответ 8

<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>