2011-03-16 21 views
7

Me está costando conseguir que dos vistas de texto aparezcan una encima de la otra en mi código java. Aquí está el código que estoy experimentando con:Configuración RelativeLayout en el código java

/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

     layout = new RelativeLayout(this); 
     text1 = new TextView(this); 
     text1.setText("1"); 
     text2 = new TextView(this); 
     text2.setText("2"); 

     RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT); 
     RelativeLayout.LayoutParams q = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT); 

     q.addRule(RelativeLayout.BELOW, layout.getId()); 
     text1.setLayoutParams(q); 
     layout.addView(text1); 


     p.addRule(RelativeLayout.BELOW,text1.getId()); 
     text2.setLayoutParams(p); 
     layout.addView(text2); 

     setContentView(layout); 
    } 

Esto se apila las dos vistas de texto en la misma línea, pero quiero TextView texto2, que aparezca debajo de Vista de Texto texto1, así que en mi aplicación que quiero que lo siguiente aparezca como la salida:

1 
2 

he intentado todo tipo de cosas con el método "addRule", no estoy seguro de por qué esto no está funcionando. Quiero saber cómo hacerlo sin XML porque planeo construir una biblioteca de métodos que pueda construir un diseño que se pueda ajustar fácilmente editando una matriz.

+2

aceptar algunas respuestas a las preguntas anteriores –

Respuesta

8

Su TextViews no tienen un identificador (por defecto el id es -1) ... poner esto después de su inicialización:

text1.setId(1111); // 1111 is just an example, 
text2.setId(2222); // just make sure the id are unique 
+0

¡Oh, eso funcionó! –

2

No creo que esté buscando el diseño de la vista text1 debajo de RelativeLayout ya que agregó todas sus vistas como niños, ¿verdad? Intenta eliminar la primera regla; esa regla es pedir que la vista de texto esté debajo de la misma vista en la que se encuentra.

EDITAR: También una ayuda es establecer explícitamente el ID de la vista que está diseñando en relación con.

Así que aquí:

text1.setId(2); 
p.addRule(RelativeLayout.BELOW,2); 
+0

Con o sin esa parte removido parecía trabajo. Sin embargo, creo que tienes razón, sería mejor práctica no establecerlo debajo del diseño relativo. –

0

puede utilizar XML disposición para esto:

en disposición relativa u establecer la primera vista de texto y asignarle una identificación para el próximo texto vi ew podemos asignar parámetros androide: layout_below = "Identificación de vista texto anterior" de esta manera obtenemos segunda vista de texto debajo de la visión primera de texto

Cuestiones relacionadas