【问题标题】:WRAP_CONTENT not working for dynamically created viewsWRAP_CONTENT 不适用于动态创建的视图
【发布时间】: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; 这样设置宽度
  • 好的,让我试试

标签: android android-layout


【解决方案1】:

我发现问题是因为我在全局范围内声明了布局参数,所以我能够通过将所有布局参数添加到 addChat() 函数中来解决问题,在那里声明该函数是本地的.因此,每当添加一个聊天时,就会为该聊天创建一个新的布局参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多