2014-10-19 78 views
0

如果我在我的XML佈局文件中複製該佈局文件,我在這個LinearLayout中包含這三個元素,並且所有內容都與預期相符。現在,我嘗試以編程方式添加此LinearLayout及其子元素,但其工作方式看起來不同而且都是錯誤的。該按鈕似乎有正確的寬度,但高度太低,另外兩個元素幾乎看不到高度和寬度錯誤。以編程方式顯示Android設置佈局導致顯示錯誤

這是佈局:

<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

啊,謝謝,那是太容易了。我讀TableLayout是唯一提供設置權重的:/ – DarsVaeda 2014-10-19 19:49:07