Я новичок в разработке 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#####] |
Я перепробовал столько разных комбинаций, что даже не могу их вспомнить, и ни одна из них не сработала.
android:Layout_weight
можно использовать, когда вы уже не добавляете фиксированное значение к своей ширине, напримерfill_parent
и т. д.Сделайте что-нибудь вроде этого:
<Button> Android:layout_width="0dp" Android:layout_weight=1 -----other parameters </Button>
источник
Думайте так, будет проще
Если у вас 3 кнопки и их вес 1,3,1 соответственно, это будет работать как таблица в HTML.
Предусмотрите 5 частей для этой линии: 1 часть для кнопки 1, часть 3 для кнопки 2 и 1 часть для кнопки 1.
источник
В 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>
источник
значения веса 0-1 разделяют распределение доступного пространства (после установки layout_width = "0px") пропорционально значению веса. Элементы просмотра с не указанным весом (без ввода веса) получают вес 0, что означает, что они не расширяются.
Простая альтернатива, не требующая ввода веса, - это прикрепить область к представлению с текстом, который сообщает ему о расширении от минимально необходимого для текста (wrap_content) до доступного пространства EditText: android: layout_width = "wrap_content" android: ellipsize = "marquee"
источник
Я бы предположил, что установить
EditText
ширину swrap_content
и поместить две кнопки вLinearLayout
, ширинаfill_parent
и вес которого установлены на 1.источник
Еще одну причину я нашел (как бы расплывчато это ни звучало). Ниже не сработало.
Что работало, было
Это звучит расплывчато из-за корневого макета с Linear, и веса под ним не работали. И когда я говорю «не сработало», я имею в виду, что после того, как я просмотрел графический макет между разными разрешениями, согласованность экрана сильно нарушилась.
источник
<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>
источник