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を奥にしたいと思います。

これを試しましたが、何も起こりません。

どうすればこれに到達できますか?どうか、コードを持ってきていただけませんか?

前もって感謝します。

4

2 に答える 2

1

それがあなたが尋ねている質問である場合、ビューのzオーダーを変更する機能があります。また、必要に応じて、通常、そのクラス内でView.bringToFront()機能を使用する効果を得ることができます。

View.bringToFront

于 2013-03-21T18:28:31.410 に答える
1

壁に何度かぶつかった後、最終的に解決策を見つけました。

1.- レイアウトを LinearLayout から RelativeLayout に変更しました。

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));
 }

それが誰かを助けることを願っています。

于 2013-03-22T00:39:15.880 に答える