2011-08-02 5 views
39

Tengo el siguiente archivo main.xml con un LinearLayoutAdición de un objeto de un LinearLayout en una posición especificada

<?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> 

agrego una imagen a la LinearLayout a través de código en tiempo de ejecución como tal

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

Sin embargo, deseo agregar ImageView entre las 2 TextViews en LinearLayout. Parece que no puedo encontrar una forma en los documentos de Android para agregar una vista antes de otra vista, o después. ¿Cómo puedo hacer esto?

NB me llaman

setContentView(R.layout.main); 

Antes agrego el ImageView a la LinearLayout.

+0

¿Por qué quieres hacerlo? Simplemente declare la vista de la imagen en el diseño y establezca la fuente en lugar de insertar la vista de la imagen en el código. –

+2

Esto no funcionará. En tiempo de ejecución, estoy cargando una imagen dinámicamente y quiero mostrarla en mi diseño. – Joeblackdev

+0

Puede establecer la fuente para ImageView dinámicamente. Realmente no veo la razón para hacerlo en la forma que describes. –

Respuesta

62

Al añadir un View a un ViewGroup, puede specify an index que fija la posición de la vista de los padres.

Tiene dos vistas y por lo tanto (contando desde cero) le gustaría agregar en la primera posición; solo llame al ll.addView(image, 1); para que se coloque entre los dos TextViews.

+0

Esto es exactamente lo que necesito. ¡Gracias! – Joeblackdev

+1

Me preguntaba si tendré dos vistas y si quiero que la primera tome más de la mitad de mi diseño y la otra solo un pequeño espacio de mi diseño ¿cómo puedo hacer eso? y puedo usar esto con otros diseños como el diseño relativo, por ejemplo – Lily

+0

Vine aquí buscando aprender cómo agregar una 'Vista' a una ubicación específica relativa a otra 'Vista' infantil que se determinará dinámicamente. Me doy cuenta de que la pregunta no se lo pregunto directamente, así que en lugar de hacer mi propia respuesta, agregaré a esta cómo uno haría eso: primero use 'ViewGroup.indexOfChild (View view)' para obtener el índice del otra 'Vista', luego use el método' addView' con el índice detallado aquí para insertar una nueva 'Vista' relativa a una existente. – tradeJmark

1

Agregue un ImageView en el xml, y si no se usa, hágalo invisible (image.setVisibility(View.INVISIBLE)). Es posible que no muestre nada de todos modos cuando no se establece ninguna imagen.

+1

Creo que puede estar complicando algo simple :) – Jack

+0

Creo que desea utilizar View.GONE a menos que quiera dejar un espacio vacío. Puede insertar usando el índice también – Idistic

8

El estado de los documentos puede usar el índice para insertarlo donde desee. Veo que está utilizando solo la firma de la vista, ¿intentó la firma con el parámetro de índice?

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

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

y en el 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

Me enfrenté a un problema similar. En mi caso, quería agregar LinearLayout en la última posición de otro LinearLayout. Para lograrlo, lo hice:

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()); 
Cuestiones relacionadas