以编程方式在RelativeLayout中堆叠子视图

时间:2013-07-28 00:42:09

标签: android android-layout

在我的应用程序中,我试图模仿SMS消息传递应用程序的对话视图,其中发送的消息与左边距对齐,并且接收的消息对齐到右边。我正在使用自定义RelativeLayout来实现左/右对齐,并且我在运行时通过调用自定义TextView上的方法动态添加RelativeLayout

我遇到的问题是,当我添加跟随第一个的TextView时,它们被放置在另一个之上(在相同的x,y),而不是垂直堆叠(增加y)。

这是我添加TextView的代码:

TextView txt = new TextView(mContext);
RelativeLayout.LayoutParams params =
    new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
                                    LayoutParams.WRAP_CONTENT);
params.addRule(sent ? ALIGN_PARENT_LEFT : ALIGN_PARENT_RIGHT);  

// make sure this message is positioned below the last one
if (getChildCount() > 0) {
    params.addRule(BELOW, getChildAt(getChildCount() - 1).getId());
}

txt.setLayoutParams(params);
txt.setText(msg);

addView(txt);

我的自定义RelativeView因此被定义:

<com.foo.bar.ConversationLayout
        android:id="@+id/loConvo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

我可以看到,您没有为要添加的IDs设置任何TextViews。所以,当你致电:

params.addRule(BELOW, getChildAt(getChildCount() - 1).getId());

getId()返回NO_ID

来自View课程的文档:getId() returns a positive integer used to identify the view or NO_ID if the view has no ID

NO_ID is used to mark a View that has no ID

尝试使用setId(yourGivenId)setId(View.generateViewId())为您的TextView设置ID,看看是否有助于解决问题。