У меня есть LinearLayout в моем макете, если я скопирую это в моем файле макета XML, я получаю еще одну строку с этими тремя элементами, и все выглядит так, как ожидалось. Теперь я пытаюсь добавить этот LinearLayout и его дочерние элементы программно, который работает, но выглядит по-другому и все неправильно. Кажется, что кнопка имеет правильную ширину, но высота слишком низкая, а два других элемента не видны с неправильной высотой и шириной.Android set layout программно приводит к неправильному отображению
Это расположение:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/editTextValueComposition"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0.94"
android:ems="10"
android:hint="@string/valueHint"
android:inputType="numberDecimal" >
</EditText>
<Spinner
android:id="@+id/compositionSelector"
android:layout_width="176dp"
android:layout_height="wrap_content"
android:layout_weight="0.06" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="addComposition"
android:text="@string/add" />
</LinearLayout>
И это мой код:
public void addComposition(View view) {
final float scale = getBaseContext().getResources().getDisplayMetrics().density;
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
EditText valueEdit = new EditText(this);
valueEdit.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 0.94f));
valueEdit.setHint(R.string.valueHint);
valueEdit.setEms(10);
linearLayout.addView(valueEdit);
Spinner compositionSelector = new Spinner(this);
compositionSelector.setLayoutParams(new TableLayout.LayoutParams(dpToPx(176), LayoutParams.WRAP_CONTENT, 0.06f));
ArrayAdapter<CharSequence> adapterComp = ArrayAdapter.createFromResource(
this, R.array.compositionTypes,
android.R.layout.simple_spinner_item);
adapterComp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
compositionSelector.setAdapter(adapterComp);
linearLayout.addView(compositionSelector);
Button addCompoButton = new Button(this);
addCompoButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
addCompoButton.setText(R.string.add);
addCompoButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
addItem(v);
}
});
linearLayout.addView(addCompoButton);
LinearLayout addItemLayout = (LinearLayout) findViewById(R.id.screenAddItem);
int index = addItemLayout.indexOfChild(findViewById(R.id.button1));
addItemLayout.addView(linearLayout, index);
}
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = getBaseContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi/DisplayMetrics.DENSITY_DEFAULT));
return px;
}
Ahh спасибо, что было слишком легко. Я прочитал TableLayout - единственный, который предлагает установить вес: / – DarsVaeda