2012-10-05 28 views
1

我正在开发Android 3.0平板电脑应用程序。我试图重现这个布局:无法以编程方式重现布局

<LinearLayout 
     android:weightSum="1" 
     android:layout_width="fill_parent" 
     android:layout_height="60dip" 
     android:orientation="horizontal"> 


     <TextView 
      android:id="@+id/textView1" 
      android:layout_weight=".1" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:gravity="center" 
      android:text="1" /> 


     <TextView 
      android:id="@+id/textView2" 
      android:layout_weight=".6" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:gravity="center" 
      android:text="Defecto 11" /> 

     <LinearLayout 
      android:gravity="center" 
      android:layout_weight=".05" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" > 

     <CheckBox 
      android:id="@+id/checkBox1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" /> 
     </LinearLayout> 

     <LinearLayout 
      android:gravity="center" 
      android:layout_weight=".05" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" > 

     <CheckBox 
      android:id="@+id/checkBox2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" /> 
     </LinearLayout> 


     <LinearLayout 
      android:gravity="center" 
      android:layout_weight=".05" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" > 

     <CheckBox 
      android:id="@+id/checkBox3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" /> 
     </LinearLayout> 


     <LinearLayout 
      android:gravity="center" 
      android:layout_weight=".05" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" > 

     <CheckBox 
      android:id="@+id/checkBox4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" /> 

     </LinearLayout> 


     <Button 
      android:id="@+id/button1" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_weight=".1" 
      android:text="Button" /> 

    </LinearLayout> 

编程:

LinearLayout layout = new LinearLayout(context); 
    LayoutParams parentParams = 
      new LayoutParams(LayoutParams.FILL_PARENT, 60); 
    //parentParams.weight = 1; 
    layout.setOrientation(LinearLayout.HORIZONTAL); 
    layout.setLayoutParams(parentParams); 

    // Parámetros para todos los EditText dentro de la tabla. 
    LayoutParams params = new LayoutParams(0, LayoutParams.FILL_PARENT); 

    // La primera columna es el número del defecto 
    TextView textView = new TextView(context); 
    params.weight = .1f; 
    textView.setLayoutParams(params); 
    textView.setGravity(Gravity.CENTER); 
    textView.setText(Integer.toString(position)); 
    layout.addView(textView); 

    // La segunda columna es la descripción del defecto. 
    params.weight = .6f; 
    textView = new TextView(context); 
    textView.setLayoutParams(params); 
    textView.setGravity(Gravity.CENTER); 
    textView.setText(eDefect.getDescription()); 
    layout.addView(textView); 

    LinearLayout chkLayout = new LinearLayout(context); 
    LayoutParams chkParams = 
      new LayoutParams(0, LayoutParams.FILL_PARENT); 
    chkParams.weight = .05f; 
    chkParams.gravity = Gravity.CENTER; 
    chkLayout.setLayoutParams(chkParams); 

    params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.gravity = Gravity.CENTER; 
    String eDefectPos = Integer.toString(position); 

    // Columna CRS 
    String tag = eDefectPos + "_CRS"; 
    CheckBox chkBox = new CheckBox(context); 
    chkBox.setLayoutParams(params); 
    chkBox.setTag(tag); 
    chkBox.setOnClickListener(checkListener); 
    chkLayout.addView(chkBox); 
    layout.addView(chkLayout); 

    chkLayout = new LinearLayout(context); 
    chkLayout.setLayoutParams(chkParams); 

    // Columna CRF 
    tag = eDefectPos + "_CRF"; 
    chkBox = new CheckBox(context); 
    chkBox.setLayoutParams(params); 
    chkBox.setTag(tag); 
    chkBox.setOnClickListener(checkListener); 
    chkLayout.addView(chkBox); 
    layout.addView(chkLayout); 

    chkLayout = new LinearLayout(context); 
    chkLayout.setLayoutParams(chkParams); 

    // Columna MA 
    tag = eDefectPos + "_MA"; 
    chkBox = new CheckBox(context); 
    chkBox.setLayoutParams(params); 
    chkBox.setTag(tag); 
    chkBox.setOnClickListener(checkListener); 
    chkLayout.addView(chkBox); 
    layout.addView(chkLayout); 

    chkLayout = new LinearLayout(context); 
    chkLayout.setLayoutParams(chkParams); 

    // Columna MI 
    tag = eDefectPos + "_MI"; 
    chkBox = new CheckBox(context); 
    chkBox.setLayoutParams(params); 
    chkBox.setTag(tag); 
    chkBox.setOnClickListener(checkListener); 
    chkLayout.addView(chkBox); 
    layout.addView(chkLayout); 

    // Boton tomar fotos 
    params = new LayoutParams(0, LayoutParams.WRAP_CONTENT); 
    params.weight = 0.1f; 
    tag = eDefectPos; 
    Button btnTakePhoto = new Button(mActivity); 
    btnTakePhoto.setLayoutParams(params); 
    btnTakePhoto.setTag(tag); 
    btnTakePhoto.setText(getString(R.string.btn_take_photo)); 
    btnTakePhoto.setOnClickListener(takePhotoListener); 
    layout.addView(btnTakePhoto); 

    mLayout.addView(layout, mCurrentDefectTableIndex); 

但他们不喜欢相等。

这与XML:

enter image description here

而这种编程方式:

enter image description here

一切都已经移动到右侧。

任何线索?

回答

4

您不想重复使用对不同视图的LayoutParams引用。如果你想创建一个“base”params对象来重用,你必须使用带有LayoutParams的LayoutParams构造函数来创建新的引用。像这样:

LayoutParams baseParams = new LayoutParams(0, LayoutParams.FILL_PARENT); 

// La primera columna es el número del defecto 
TextView textView = new TextView(context); 
LayoutParams params1 = new LayoutParams(baseParams); 
params1.weight = .1f; 
textView.setLayoutParams(params1); 
textView.setGravity(Gravity.CENTER); 
textView.setText(Integer.toString(position)); 
layout.addView(textView); 

// La segunda columna es la descripción del defecto. 
LayoutParams params2 = new LayoutParams(baseParams); 
params2.weight = .6f; 
textView = new TextView(context); 
textView.setLayoutParams(params2); 
textView.setGravity(Gravity.CENTER); 
textView.setText(eDefect.getDescription()); 
layout.addView(textView); 
相关问题