Soy nuevo en el desarrollo de Android y tengo una pregunta sobre cómo establecer el peso en un diseño lineal.
Estoy intentando crear una fila con dos botones personalizados y un texto de edición personalizado. El texto de edición solo debe ocupar tanto espacio como su contenido, y los dos botones deben expandirse horizontalmente para llenar el resto del espacio disponible en la fila. Me gusta esto...
| [#Button++#] [#Button--#] [et] |
Después de varios intentos, esto es lo más cerca que puedo llegar a lo que quiero, aunque parece demasiado complicado.
| [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>
Según tengo entendido, configurar [android: layout_weight = "2"] para los diseños lineales que sostienen los botones debería hacer que ocupen más espacio que el texto de edición, pero hace lo contrario para mí, lo que hace que ambos tengan la mitad del tamaño.
| [Btn] [Btn] [#####et#####] |
He probado tantas combinaciones diferentes que ni siquiera puedo recordarlas, y ninguna ha funcionado.
android:Layout_weight
se puede usar cuando no adjunta un valor fijo a su ancho, como,fill_parent
etc.Haz algo como esto:
<Button> Android:layout_width="0dp" Android:layout_weight=1 -----other parameters </Button>
fuente
Piénsalo así, será más sencillo
Si tiene 3 botones y sus pesos son 1,3,1 en consecuencia, funcionará como una tabla en HTML
Proporcione 5 porciones para esa línea: 1 porción para el botón 1, 3 porción para el botón 2 y 1 porción para el botón 1
fuente
En linearLayout, establezca WeightSum = 2;
Y distribuya el peso a sus hijos como quiere que muestren. Le he dado peso = "1" al niño. Así que ambos distribuirán la mitad del total.
<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>
fuente
los valores de peso 0-1 comparten la distribución del espacio disponible (después de configurar layout_width = "0px") en proporción al valor de peso. Los elementos de visualización con peso no especificado (sin entrada de peso) obtienen un peso 0, lo que significa que no obtienen ninguna expansión.
Una alternativa simple sin necesidad de entradas de peso es adjuntar marquesina a una vista con texto que le dice que se expanda desde el mínimo necesario para el texto (wrap_content) hasta el espacio disponible EditText: android: layout_width = "wrap_content" android: ellipsize = "marquee"
fuente
Supongo que debo establecer el
EditText
ancho de swrap_content
y colocar los dos botones en unLinearLayout
cuyo ancho esfill_parent
y el peso se establece en 1.fuente
Una razón más que encontré (por vaga que parezca). Lo siguiente no funcionó.
Lo que funcionó fue
Suena vago por un diseño de raíz con Linear y los pesos debajo de él no funcionaron. Y cuando digo "no funcionó", quiero decir, que después de ver el diseño gráfico entre varias resoluciones, la consistencia de la pantalla se rompió a lo grande.
fuente
<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>
fuente