2013-03-21 2 views
3

Я добавляю некоторые виды на более LinearLayout с небольшим перекрытием в верхней части, вот код:Android - Как отправить последующие виды обратно

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

В этом коде некоторые виды добавляются в макет в порядке А, В, С, с А на спину и С на фронт.

Я хотел бы изменить порядок, сделав А передним и С на спину.

Я пробовал this, но ничего не происходит.

Как достичь этого? Не могли бы вы принести мне код?

Заранее спасибо.

ответ

1

После нескольких ударов против стены, я наконец-то нашел решение:

1.- Я изменил расположение от того, чтобы быть LinearLayout, чтобы быть RelativeLayout, потому что bringChildToFront имеет странное поведение среди LinearLayout.

2.- После добавления представления в RelativeLayout, я повторил обратные действия над представлениями, и я сделал moveChildToFront.

Вот код:

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

Я надеюсь, что это поможет кому-то.

1

Существует возможность изменить z-порядок представления, если это вопрос, который вы задаете. И если это необходимо, вы обычно можете получить эффект использования возможностей View.bringToFront() в этом классе.

View.bringToFront

+0

Не могли бы вы принести код? –

+0

Несмотря на то, что часто не используется во время кодирования с моей стороны, иногда вам нужно будет сделать трюк здесь или там, который может включать вызов его в нужное время по вашим представлениям или уверенность в недействительности. [приносить проблемы (] проблемы (http://abhishek347.wordpress.com/2012/02/22/android-development-bringtofront-and-sendtoback-on-view/) –

Смежные вопросы