动态创建按钮重叠

时间:2012-12-16 18:02:40

标签: android android-layout button dynamically-generated

我创建了一个database调用的布局,其中button将为database内的每个项目创建buttonslayout_width按照我的需要创建,我也发现了如何设置layout_heightbuttons,但所有button都放在相同位置并相互重叠这样只能访问最后创建的buttons。我创建Button bt = new Button(this); bt.setText("Button Title"); bt.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); linerLayout.addView(bt); 的代码如下所示:

bt.layout(l, t, r, b);

生成按钮后,活动看起来像这样:

Overlapping buttons

我查看了可用于按钮的每种方法,但没有找到任何定义位置的方法。我只想到了以下方法:

<RelativeLayout
        android:id="@+id/llActOver"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="2" >        
</RelativeLayout>

但不知道如何使用它,并认为可能有一个更简单的方法来解决这个问题。知道解决方法的人吗?!


更改代码

我只是尝试设置布局参数,如“陈dor”所述。我的xml文件中有一个相对布局:

Button bt = new Button(context);
bt.setText(c.getString(iDef));
fontClass.setFont(bt);
//RelativeLayout placeholder = new RelativeLayout(context);
RelativeLayout.LayoutParams  layoutParam = 
           new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
                                           LayoutParams.WRAP_CONTENT);
if(rowCount < 1){
    layoutParam.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    rowCount++;
}else{
    layoutParam.addRule(RelativeLayout.ALIGN_PARENT_TOP, lastButtonId);
}

lastButtonId = bt.getId();
//placeholder.addView(bt, layoutParam);

linearLayout.addView(bt, layoutParam);

并将生成的按钮格式化为:

{{1}}

我在循环的末尾保存按钮id,以便在下一轮中访问最后一个按钮id。 我也尝试为每个新按钮创建一个新的相对布局,如代码显示的注释部分,但即使没有新的布局也没有任何反应,我仍然只是重叠所有按钮。

2 个答案:

答案 0 :(得分:0)

您可以使用相对布局,并让第一个按钮与父级的顶部对齐。 然后每个按钮与前一个按钮的底部对齐。

使用:

params.addRule(RelativeLayout.ALIGN_PARENT_TOP);

然后:

params.addRule(RelativeLayout.BELOW,ID-Of-Previous-Button);

同时退房: http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html

答案 1 :(得分:0)

我终于解决了这个问题,但只是尝试了每种可能的布局类型组合。 我发现,我必须在XML文件中定义一个LinearLayout,并且属性android:orientation =“vertical”是可以承受的。之前设置的所有其他参数都不重要。

所以现在我的xml文件中的ScrollView中有一个LinearLayout:

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="2" >

    <LinearLayout
        android:id="@+id/llActOver"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:orientation="vertical">

    </LinearLayout>
</ScrollView>

在java数据库中我有以下代码为db中的每一行创建一个按钮,设置它的Text和Font并将其添加到加载的布局中:

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

    Button bt = new Button(context);
    bt.setText(c.getString(iDef));
    fontClass.setFont(bt);
    linearLayout.addView(bt);
}

这里是结果的截图:

enter image description here

也许有其他人遇到同样的问题,只要我有这个描述就不用担心。