usar studio layout_below layout_above example ejemplos como android android-layout android-button android-relativelayout

android - studio - relativelayout deprecated



¿Programar el atributo AlignParentRight en el botón en RelativeLayout no funciona? (2)

Intento establecer mediante programación el atributo AlignParentRight en el botón en RelativeLayout, pero el programa falla con una excepción NullPointerException. Aquí mi código:

//add horizontal realative layout RelativeLayout layouth = new RelativeLayout(this); layouth.setLayoutParams(new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //add textview for label TextView t = new TextView(this); t.setText(d.getName()); t.setTextSize(25); t.setId(2); t.setLayoutParams(new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //add button Button b = new Button(this); b.setText(d.getName()); RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams(); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); layoutParams.addRule(RelativeLayout.LEFT_OF, 2); b.setLayoutParams(layoutParams); //add textview and button to horizontal linear layout layouth.addView(t); layouth.addView(b); //add horizontal linear layout to vertical linear layout layoutv = (LinearLayout) findViewById(R.id.ProjectViewLinearID); layoutv.addView(layouth);

¿Dónde está mi problema? El error se produce en la línea de programa layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

ACTUALIZACIÓN CON SOLUCIÓN:

Este código funciona para mí:

// Creating a new RelativeLayout RelativeLayout layouth = new RelativeLayout(this); // Defining the RelativeLayout layout parameters. // In this case I want to fill its parent RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); // Creating a new TextView TextView tv = new TextView(this); tv.setText(d.getName()); tv.setTextSize(25); //add button Button b = new Button(this); b.setText(d.getName()); // Defining the layout parameters of the TextView RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); // Setting the parameters on the TextView tv.setLayoutParams(lp); b.setLayoutParams(lp); // Adding the TextView to the RelativeLayout as a child layouth.addView(tv); layouth.addView(b);


Cuando llama a b.getLayoutParams() , b no está en un diseño. por lo tanto, no tiene un layoutparams (además, no sabría que está esperando un RelativeLayout.LayoutParams en este punto).

Debe crear una nueva instancia de LayoutParams, como lo hizo con TextView.


reemplazar

RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams();

con

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);