android程序化布局

时间:2014-01-17 18:00:20

标签: android android-layout

我在android中构建一个简单的两列列表,需要动态填充行数。 xml布局工作正常,但是当我尝试以编程方式构建布局时,第二列不显示。有什么想法吗?

private void addRow(String text, String value) {
    RelativeLayout line = new RelativeLayout(this);

    line.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));

    RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    rlp.addRule(RelativeLayout.CENTER_VERTICAL);

    line.setPadding(0, 0, 0, 15);

    TextView caption = new TextView(this);
    caption.setLayoutParams(rlp);
    caption.setTextSize(TypedValue.COMPLEX_UNIT_PX, 30);
    caption.setText(text);

    rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    rlp.addRule(RelativeLayout.CENTER_VERTICAL);

    TextView val = new TextView(this);
    val.setLayoutParams(rlp);
    val.setTextColor(0x05b4e4);
    val.setTextSize(TypedValue.COMPLEX_UNIT_PX, 30);
    val.setText(value);

    line.addView(caption);
    line.addView(val);

    mLayout.addView(line);
}

单行的可比xml(可行)是

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="15px" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30px"
            android:text="What"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            />

        <TextView
            android:id="@+id/txtClubPath"
            android:textColor="#05b4e4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30px"
            android:text="stuff"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            />

    </RelativeLayout>

再次 - 填充行,但第二列不可见。以下是它的内容:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/scrollViewRoot"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:keepScreenOn="true">

<LinearLayout
    android:id="@+id/viewRoot"
    android:paddingTop="20px"
    android:paddingBottom="40px"
    android:paddingLeft="20px"
    android:paddingRight="20px"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

</LinearLayout>

</ScrollView>

2 个答案:

答案 0 :(得分:0)

您要添加的视图的布局参数应为LinearLayout.LayoutParams类型,因为父级将属于该类型。

这一行

line.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));

应该成为

line.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,  LinearLayout.LayoutParams.WRAP_CONTENT));

但是,我认为这应该会导致异常。

答案 1 :(得分:0)

RelativeLayout子项具有唯一的非零ID非常重要。

您可以在API 17+上使用

myView.setId(View.generateViewId());

或者,如果您必须支持较旧的API级别,则可以使用(并且每次递增)一个简单的静态AtomicInteger值。