2011-08-02 10 views
39

Mam następujący plik main.xml z LinearLayoutDodawanie widoku do LinearLayout w określonym położeniu

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:weightSum="1" android:id="@+id/llid"> 
    <TextView android:text="Client profile" 
    android:id="@+id/ProfileName" 
    android:layout_width="fill_parent" 
    android:textStyle="bold" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal"> 
    </TextView>  
    <TextView android:text="Specs" 
    android:id="@+id/Specs" 
    android:layout_width="fill_parent" 
    android:textStyle="bold" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal"> 
    </TextView> 
</LinearLayout> 

mogę dodać zdjęcie do LinearLayout za pomocą kodu w czasie wykonywania tak jak

  ImageView image = new ImageView(this); 
      image.setImageBitmap(bmp); 
      LinearLayout ll = (LinearLayout) findViewById(R.id.llid); 
      ll.addView(image); 

Jednak chcę dodać ImageView między 2 widokami tekstu w moim LinearLayout. Nie mogę znaleźć sposobu, aby w dokumentach z Androidem dodać widok przed innym widokiem lub po nim. Jak mogę to zrobić?

NB Wzywam

setContentView(R.layout.main); 

Przed dodam ImageView do LinearLayout.

+0

Dlaczego chcesz to zrobić? Po prostu zadeklaruj obraz w układzie i ustaw dla niego źródło zamiast wstawiania widoku obrazu w kodzie. –

+2

To nie zadziała. W czasie wykonywania ładuję obraz dynamicznie i chcę go wyświetlić w moim układzie. – Joeblackdev

+0

Możesz ustawić źródło dla ImageView dynamicznie. Naprawdę nie widzę powodu, aby robić tak, jak opisujesz. –

Odpowiedz

62

Dodając View do ViewGroup można specify an index ty który określa pozycję w widoku rodzica.

Masz dwa widoki i tak (licząc od zera), które chcesz dodać na pierwszej pozycji; wystarczy zadzwonić pod numer ll.addView(image, 1);, aby umieścić go między dwoma TextViews.

+0

To jest dokładnie to, czego potrzebuję. Dzięki! – Joeblackdev

+1

Zastanawiam się, co jeśli mam dwa widoki i chcę, aby pierwszy zajmował więcej niż połowę mojego układu, a drugi tylko mały obszar mojego układu, jak mogę to zrobić? i czy mogę użyć tego z innymi układami, takimi jak układ względny, na przykład – Lily

+0

Przybyłem tutaj, aby dowiedzieć się jak dodać 'Widok' do określonej lokalizacji względem innego dziecka' Widok' do dynamicznego określania. Zdaję sobie sprawę, że pytanie nie pyta bezpośrednio, więc zamiast udzielić mi własnej odpowiedzi, dodam do tego, jak to zrobić: najpierw użyj 'ViewGroup.indexOfChild (View view)', aby uzyskać indeks inny "Widok", a następnie użyj metody 'addView' z indeksem tutaj opisanym, aby wstawić nowy widok" Widok "względem istniejącego. – tradeJmark

1

Dodaj ImageView do xml, a jeśli nie jest używany, spraw, aby był niewidoczny (image.setVisibility(View.INVISIBLE)). Może i tak nic nie wyświetlać, gdy nie ma ustawionego obrazu.

+1

Myślę, że możesz być zbyt skomplikowany coś prostego :) – Jack

+0

Myślę, że chcesz użyć View.GONE, chyba że chcesz zostawić puste miejsce. Możesz wstawić przy użyciu indeksu również – Idistic

8

Dokument stwierdza, że ​​możesz użyć indeksu, aby wstawić go tam, gdzie chcesz. Widzę, że używasz podpisu tylko widoku, czy spróbowałeś podpisu z parametrem indeksu?

public void addView(View child, int index) 
2
setContentView(R.layout.main); 

ImageView img = (ImageView) findViewById(R.id.imagefield); 
img.setImageResource(your_image_here); 

aw xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:weightSum="1" android:id="@+id/llid"> 
<TextView android:text="Client profile" 
android:id="@+id/ProfileName" 
android:layout_width="fill_parent" 
android:textStyle="bold" 
android:layout_height="wrap_content" 
android:gravity="center_horizontal"> 
</TextView>  
<ImageView android:id="@+id/imagefield" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</ImageView> 
<TextView android:text="Specs" 
android:id="@+id/Specs" 
android:layout_width="fill_parent" 
android:textStyle="bold" 
android:layout_height="wrap_content" 
android:gravity="center_horizontal"> 
</TextView> 

2

Miałem podobny problem. W moim przypadku chciałem dodać LinearLayout na ostatniej pozycji innego LinearLayout. Aby to zrobić, zrobiłem:

LinearLayout parentLayout = (LinearLayout) findViewById(R.id.parentLayout); 
LinearLayout layout = new LinearLayout(this); 
layout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

// add others views to your linear layout 

parentLayout.addView(layout, parentLayout.getChildCount()); 
Powiązane problemy