【发布时间】:2020-12-11 16:14:05
【问题描述】:
我有一个线性布局,我显示用户垂直方向聊天。每条消息都放置在 textview 中,然后将 textview 添加到相对布局中,然后添加到线性布局中。 相对布局和文本视图都是为聊天中的每条消息动态创建的。但我的问题是 textview 没有完全显示消息。
在上面的图片中没有显示完整的消息,并且在聊天的右侧,第一个视图的宽度会影响其他视图,并且没有像假设的那样包装消息。
所以我怎样才能让它工作,我希望 textview 根据它的内容包装。
这是我的代码
rLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
msgLayout1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
msgLayout2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
//msgLayout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 40);
msgLayout1.leftMargin = 20;
msgLayout2.rightMargin = 20;
rLayout.topMargin = 30;
msgLayout2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
msgLayout2.addRule(RelativeLayout.TEXT_ALIGNMENT_CENTER);
msgView = findViewById(R.id.msgView);
msgLayout1.addRule(RelativeLayout.LAYOUT_DIRECTION_INHERIT);
这是附加消息的函数
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
private void addChat(String msg, String key) {
int status = 0;
if (key.equals(firebaseAuth.getCurrentUser().getUid())) {
status = 2;
} else {
status = 1;
}
RelativeLayout nr = new RelativeLayout(this);
TextView nt = new TextView(this);
nt.setPadding(20,10,20,10);
if (status == 1) {
nt.setText(msg);
nt.setBackground(getMyImage("fborder"));
nt.setTextColor(Color.parseColor("#8d39c4"));
nt.setLayoutParams(msgLayout1);
} else {
nt.setText(msg);
nt.setBackground(getMyImage("uborder"));
nt.setTextColor(Color.parseColor("#d1d2d5"));
nt.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END);
nt.setLayoutParams(msgLayout2);
}
nr.setLayoutParams(rLayout);
nr.addView(nt);
msgView.addView(nr);
}
rLayout 是包含 textview 的 relativeLayout 的 layoutParam,
msgLayout1 是左消息文本视图的 layoutParam,
msgLayout2 是右侧消息文本视图的 layoutParam
【问题讨论】:
-
您正在将
WRAP_CONTENT设置为您的 rLayout。尝试在那里使用MATCH_PARENT。 -
我尝试了 MATCH_PARENT 的高度和宽度,但根本没有显示任何消息
-
当我使用 MATCH_PARENT 作为宽度并使用 WRAP_CONTENT 作为高度时,我仍然遇到同样的问题
-
你能尝试像
textview.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);或textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;这样设置宽度 -
好的,让我试试