2014-10-19 2 views
0

У меня есть 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; 
    } 

ответ

1

Попробуйте использовать LinearLayout.LayoutParams вместо TableLayout.LayoutParams

+0

Ahh спасибо, что было слишком легко. Я прочитал TableLayout - единственный, который предлагает установить вес: / – DarsVaeda