在我的应用程序中,我试图模仿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"/>
感谢任何帮助。
谢谢!
答案 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,看看是否有助于解决问题。