2012-06-11 7 views
5

Tengo problemas para agregar una vista de imagen a un diseño relativo. Me gustaría agregar una imagen a una lista de elementos de menú que estoy creando dinámicamente usando RelativeLayout. Todos mis elementos de menú aparecen bien y en orden, pero cuando trato de agregar una imagen a cada uno de los elementos, solo obtengo una flecha y no está centrada verticalmente. A continuación está mi código. Su ayuda es muy apreciada.Programaticamente no se puede alinear ImageView en RelativeLayout

En mi archivo XML

<RelativeLayout 
      android:id="@+id/pMenu" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

     </RelativeLayout> 

En mi código:

private void buildMenu(String name, int id) { 

     String[] menuItems = getResources().getStringArray(pMenus[id]); 
     // Get the rel layout from xml 
     RelativeLayout container = (RelativeLayout) findViewById(R.id.pMenu); 

     int imageId=1; 
     Typeface tf = Typeface.createFromAsset(this.getAssets(),"mreavesmodot-reg.otf"); 
     for(String menuItem: menuItems) {   

      // Defining the layout parameters 
      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 


      StyledButton menuImage = new StyledButton(this); 
      menuImage.setBackgroundResource(R.drawable.menu_button); 
      menuImage.setText(menuItem); 
      menuImage.setTypeface(tf); 
      menuImage.setTextSize(19); 
      menuImage.setPadding(20, 0, 0, 0); 
      menuImage.setTextColor(Color.WHITE); 
      menuImage.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); 
      menuImage.setOnClickListener(getOnClickListener(menuImage, name)); 
      menuImage.setId(imageId); 

      if(imageId==1) { 
       lp.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      } else { 
       lp.addRule(RelativeLayout.BELOW ,imageId-1); 
      } 
      menuImage.setLayoutParams(lp); 


      ImageView arrow = new ImageView(this); 
      arrow.setImageResource(R.drawable.arrow_menu); 
      arrow.setPadding(0, 0, 15, 0); 
      RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
      params.addRule(RelativeLayout.ALIGN_RIGHT,menuImage.getId()); 
      params.addRule(RelativeLayout.CENTER_VERTICAL); 

      arrow.setLayoutParams(params); 

      container.addView(menuImage); 
      container.addView(arrow); 

      imageId++; 
     } 
    } 
+1

¿podría agregar una captura de pantalla que muestra lo que está sucediendo? Sé que me lo explicas, pero una imagen podría ser más descriptiva. –

Respuesta

4

Creo que la línea de abajo es su problema

params.addRule(RelativeLayout.CENTER_VERTICAL); 

sí, usted es más probable añadiendo múltiples flechas , son simplemente uno encima del otro, TODOS alineados con el centro vertical del diseño relativo completo. Ese comando no está realizando un centrado vertical contra su ítem de botón, sino contra el RelativeLayout padre.

+0

que de hecho era el problema con mi código. Terminé usando RelativeLayout.RIGHT_OF. eso funcionó para mí. – Byron

Cuestiones relacionadas