2011-03-14 11 views

Respuesta

48

Importante: Recuerde establecer la identificación para cada vista.

RelativeLayout layout = new RelativeLayout(this); 
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
layout.setLayoutParams(layoutParams); 

RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

TextView tv1 = new TextView(this); 
tv1.setId(1); 
tv1.setText("textView1"); 

TextView tv2 = new TextView(this); 
params2.addRule(RelativeLayout.RIGHT_OF, tv1.getId()); 
tv2.setId(2); 
tv2.setText("textView2"); 

TextView tv3 = new TextView(this); 
params3.addRule(RelativeLayout.BELOW, tv1.getId()); 
tv3.setId(3); 
tv3.setText("textView3"); 

TextView tv4 = new TextView(this); 
params4.addRule(RelativeLayout.RIGHT_OF, tv3.getId()); 
params4.addRule(RelativeLayout.ALIGN_BOTTOM, tv3.getId()); 
tv4.setId(4); 
tv4.setText("textView4"); 

layout.addView(tv1, params1); 
layout.addView(tv2, params2); 
layout.addView(tv3, params3); 
layout.addView(tv4, params4); 
+3

Recuerde iniciar la identificación para los componentes de 1 y no 0. Al igual que tv1.setId (0) y tv2.setId (1) obtendría los dos componentes en el mismo lugar. setId (1) y setId (2) lo resolverían. – bibstha

+7

Es mejor usar 'tv1.setId (View.generateViewId());' para configurar el id. – jaseelder

+0

View.generateViewId() solo se puede usar en API 17. ¿Qué se puede usar en caso de que API sea menor que 17? –

0
ImageView imageView = new ImageView(this); 


// set the Drawable on the ImageView 
imageView.setImageDrawable(bmd); 

// center the Image 
imageView.setScaleType(ScaleType.CENTER); 

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
       LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
+0

¡Hola! Para los parámetros, llame al método addRule (ABAJO, id_of_last_child). – RomaTTi

2

En lugar de utilizar múltiples parametros de diseño como se sugiere en respuesta @Askilondz, puede utilizar addRule y removeRule de la siguiente manera:

RelativeLayout rl = new RelativeLayout(this.getContext()); 
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,                      
          LayoutParams.WRAP_CONTENT); 
TextView tv1 = new TextView(this); 
tv1.setId(View.generateViewId()); 
tv1.setText("textView1"); 

TextView tv2 = new TextView(this); 
tv2.setId(View.generateViewId()); 
tv2.setText("textView2"); 
lp.addRule(RelativeLayout.BELOW, tv1.getId()); 
rl.addView(tv2, lp); 
lp.removeRule(RelativeLayout.BELOW); 
. 
. 
. 

Si está utilizando el SDK < 17, usted tiene que crear id's.xml archivo , como values -> ids.xml con estructura como:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item name="tv1" type="id" /> 
    <item name="tv2" type="id" /> 
</resources> 

y los puso en su código como:

tv1.setId(R.id.tv1); 
tv2.setId(R.id.tv2); 

ACTUALIZACIÓN Se ve Adición de varias reglas para los mismos LayoutParams no funciona bien, de todos modos, voy a seguir mi respuesta en caso de que alguien bien algo útil en ella para él

Cuestiones relacionadas