我正在开发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:
以编程方式:
一切都向右移动。
有任何线索吗?
答案 0 :(得分: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);