Android - 如何将后续视图发送到后面

4

我正在向LinearLayout中添加一些视图,其中顶部略有重叠,以下是代码:

viewHolder.linearLayout.removeAllViews();
for (int i = 0; i < conversation.getPreviousMessages().length; i++) {
    View messageView = layoutInflater.inflate(R.layout.layout_previous_message_row, null);

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.setMargins(0, -5, 0, 0);

    viewHolder.linearLayout.addView(messageView, layoutParams);
}

在这段代码中,一些视图按照顺序A、B、C添加到布局中,其中A在后面,C在前面。
我想反转顺序,将A放在前面,C放在后面。
我尝试了这个方法,但什么都没有发生。
请问如何实现此功能? 您能否提供相关代码?
谢谢。
2个回答

1
如果您所问的是更改视图的Z顺序,那么它是有能力的。如果需要的话,您通常可以在该类中使用View.bringToFront()功能来获得效果。

View.bringToFront


虽然在我的编码过程中通常不会经常使用,但偶尔你需要执行一些技巧,在视图上找到合适的时间进行调用,或确保使其失效。bringToFront()问题 - Jay Snayder

1
经过一些对墙的拳击,我终于找到了解决方案:
1. 我将布局从LinearLayout更改为RelativeLayout,因为在LinearLayout中,bringChildToFront的行为很奇怪。
2. 在将视图添加到RelativeLayout后,我向后迭代了视图,并进行了bringChildToFront操作。
以下是代码:
for (int i = 0; i < conversation.getPreviousMessages().length; i++) {
     View messageView = layoutInflater.inflate(R.layout.layout_previous_message_row, null);
     messageView.setId(99+i);

     viewHolder.relativeLayout.addView(messageView);

     if (i > 0) {
         RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
         layoutParams.setMargins(0, -5, 0, 0);
         layoutParams.addRule(RelativeLayout.BELOW, 99+i-1);

         messageView.setLayoutParams(layoutParams);
     }
 }

 for (int i = viewHolder.relativeLayout.getChildCount() - 1; i >= 0; i--) {
     viewHolder.relativeLayout.bringChildToFront(viewHolder.relativeLayout.getChildAt(i));
 }

我希望它能帮助到某个人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接