Eu sou novo no desenvolvimento do Android e tenho uma dúvida sobre como definir o peso em um layout linear.
Estou tentando criar uma linha com dois botões personalizados e um texto de edição personalizado. O texto de edição deve ocupar tanto espaço quanto seu conteúdo, e os dois botões devem se expandir horizontalmente para preencher o restante do espaço disponível na linha. Como isso...
| [#Button++#] [#Button--#] [et] |
Depois de várias tentativas, isso é o mais perto que posso chegar do que quero, embora pareça muito 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>
Pelo que entendi, definir [android: layout_weight = "2"] para os layouts lineares que prendem os botões deve fazer com que ocupem mais espaço do que o texto de edição, mas faz o oposto para mim, fazendo com que ambos tenham metade do tamanho.
| [Btn] [Btn] [#####et#####] |
Eu tentei tantas combinações diferentes que nem consigo me lembrar delas, e nenhuma funcionou.
android:Layout_weight
pode ser usado quando você não atribui um valor fixo à sua largura, comofill_parent
etc.Faça algo assim:
<Button> Android:layout_width="0dp" Android:layout_weight=1 -----other parameters </Button>
fonte
Pense assim, será mais simples
Se você tiver 3 botões e seus pesos forem 1,3,1 de acordo, funcionará como uma tabela em HTML
Forneça 5 porções para essa linha: 1 porção para o botão 1, 3 porções para o botão 2 e 1 porção para o botão 1
fonte
No linearLayout, defina WeightSum = 2;
E distribua o peso para seus filhos como você quer que eles exibam. Eu dei peso = "1" para a criança. Então, ambos distribuirão metade do 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>
fonte
valores de peso 0-1 compartilham a distribuição do espaço disponível (após definir layout_width = "0px") em proporção ao valor do peso. Elementos de visualização com peso não especificado (sem entrada de peso) obtêm peso 0, o que significa que eles não obtêm expansão.
Uma alternativa simples, sem a necessidade de entradas de peso, é anexar um letreiro a uma visualização com texto que diga para expandir do mínimo necessário para o texto (wrap_content) até o espaço disponível EditText: android: layout_width = "wrap_content" android: ellipsize = "marquee"
fonte
suponho que definir a
EditText
largura s parawrap_content
e colocar os dois botões em umLinearLayout
cuja largura éfill_parent
e peso definido como 1.fonte
Mais uma razão que encontrei (por mais vaga que possa parecer). O abaixo não funcionou.
O que funcionou foi
Parece vago por um layout de raiz com Linear e pesos abaixo dele não funcionou. E quando digo "não funcionou", quero dizer, que depois de ver o layout gráfico entre várias resoluções a consistência da tela quebrou em grande.
fonte
<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>
fonte