动态创建RelativeLayout并在其中定位视图

时间:2014-06-13 08:46:28

标签: android relativelayout

我想创建一个返回动态创建的RelativeLayout的方法。为了清楚起见,让我们使用这个简化的例子:

private RelativeLayout createLayout() {
        RelativeLayout layout = new RelativeLayout(activity);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

        layout.setLayoutParams(params);

        TextView tv1 = new TextView(activity);
        tv1.setText("Text 1");

        TextView tv2 = new TextView(activity);
        tv2.setText("Text 2");

        TextView tv3 = new TextView(activity);
        tv3.setText("Text 3");

        layout.addView(tv1);
        layout.addView(tv2);
        layout.addView(tv3);

        return layout;
}

现在我想将这些TextView相对于彼此定位。为此,我希望LayoutParams方法使用addRule

但是这种方法需要一个ID,例如addRule(RelativeLayout.BELOW, tv2Id)。这意味着我必须为每个TextView设置一个ID。

我的问题是createLayout方法会被多次调用,所以问题是:

每次调用方法时,是否必须为TextView设置不同的ID以避免冲突?如果是这样,我该怎么做?

最常见的是,有没有更好的解决方案呢?


修改

这背后的想法是拥有一种ListView,其中每个项目都包含Map(可以显示或隐藏)。

问题:如果地图位于ListView内,则无法滚动(至少我没有设法做到这一点)。

为此,我决定使用ScrollViewLinearLayout来复制ListView的行为。这样Map可以正确滚动,现在,我所要做的就是动态创建项目

1 个答案:

答案 0 :(得分:1)

ID不一定是唯一的。正如您从extract

中看到的那样
  

setId(int id)

     

设置此视图的标识符。标识符在此视图的层次结构中不必是唯一的。标识符应为正数。

但是就像你说的那样,如果你想避免冲突,那么你必须找到一种为每个视图生成唯一标识符的方法。

坦率地说,IMO我认为身份证的重要性并不重要。您可以使用10,20,30。只需确保您可以随时使用static final变量访问它们。

你问是否有更好的解决方案,是的。最优选的方法是膨胀xml布局。