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:

在此处输入图像描述

这以编程方式:

在此处输入图像描述

一切都向右移动了。

有什么线索吗?

4

1 回答 1

4

您不想为不同的视图重复使用对 LayoutParams 的引用。如果要创建一个“基础”参数对象以供重复使用,则必须使用带有 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);
于 2012-10-05T14:42:06.797 回答