Android: LayoutParams para TextView hace que la vista desaparezca, programáticamente

He golpeado esto desde varios ángulos diferentes. Básicamente la esencia es la siguiente:

He establecido una plantilla en XML para una interfaz que NECESITA que se ejecute mediante programación, por lo que se va a rellenar dinámicamente durante la ejecución.

El problema aquí, es que el XML TextView tiene bastantes ajustes de la disposición (que trabajan) y son necesarios. Pero si realmente los pongo en código, el TextView ni siquiera aparece.

(El TextView, por cierto, está anidado dentro de un TableRow, por lo tanto la llamada a peso.) La plantilla XML que diseñé en primer lugar, para utilizar como referencia para el código es esto, y funciona muy bien:

<TextView android:id="@+id/txtviewWhiteBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0" android:background="@drawable/textview_9patch_white" android:gravity="center" android:text="75" android:textColor="@android:color/black" android:layout_margin="20dp" android:padding="20dp" android:textSize="40dp" /> 

Como he dicho, eso se extiende perfectamente. Cuando ejecuto el mismo diseño en código sin embargo, y aplicar LayoutParams, TextView desaparece.

Aquí está el fragmento pertinente:

 int textViewExampleID = 9001; private TextView txtviewExample = new TextView(this); private void buildTextView(){ LayoutParams paramsExample = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f); txtviewExample.setId(textViewExampleID); txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white); txtviewExample.setGravity(Gravity.CENTER); txtviewExample.setTextColor(getResources().getColor(android.R.color.black)); paramsExample.setMargins(20, 20, 20, 20); txtviewExample.setPadding(20, 20, 20, 20); txtviewExample.setTextSize(40); txtviewExample.setText("customExample"); //if I comment out the following line, this TextView displays. //if I leave it in, it doesn't display. txtviewExample.setLayoutParams(paramsExample); } 

Me doy cuenta de que hay todo tipo de clases disponibles para LayoutParams, y he estado jugando con ellos todos LinearLayout.LayoutParams, TableView.LayoutParams, RelativeLayout.LayoutParams, LayoutParams solo por sí mismo … No importa cuál intento, cualquier intento de llamar "SetLayoutParams" hace que se pierda todo el TextView. He examinado los foros aquí, y no he encontrado la respuesta. Esto no puede ser tan poco común.

Bueno, eso fue doloroso pero finalmente lo averigué. La cosa más importante a recordar (que acabo de realizar) es que de todas las miríadas de LayoutParams , usted necesita utilizar el que se relaciona con el PADRE de la opinión que usted está trabajando encendido, no la visión real.

Así que en mi caso, estaba tratando de obtener los márgenes de TextView trabajo, pero se estaba poniendo dentro de un TableRow . El único cambio era asegurar que el tipo de LayoutParams se usaban fueran los de TableRow :

 private void buildTextView(){ // the following change is what fixed it TableRow.LayoutParams paramsExample = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f); txtviewExample.setId(textViewExampleID); txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white); txtviewExample.setGravity(Gravity.CENTER); txtviewExample.setTextColor(getResources().getColor(android.R.color.black)); paramsExample.setMargins(20, 20, 20, 20); txtviewExample.setPadding(20, 20, 20, 20); txtviewExample.setTextSize(40); txtviewExample.setText("customExample"); txtviewExample.setLayoutParams(paramsExample); } 

Gracias chicos, espero que esto vaya a ser útil para alguien más abajo de la línea, como vi un montón de preguntas semi-relacionadas en los foros aquí, pero no uno que realmente define el problema.

 private TextView txtviewExample = new TextView(this); private void buildTextView(){ LayoutParams paramsExample = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f); txtviewExample.setId(textViewExampleID); txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white); txtviewExample.setGravity(Gravity.CENTER); txtviewExample.setTextColor(getResources().getColor(android.R.color.black)); paramsExample.setMargins(20, 20, 20, 20); txtviewExample.setPadding(20, 20, 20, 20); txtviewExample.setTextSize(40); txtviewExample.setText("customExample"); setContentView(txtviewExample);//when you don't use SETTER method for TextView you can't view the desireable text on the UI// } 

//utilizar

¿Cuál es la tercera variable en layoutparams supuestamente hacer, es que alfa? Qué sucede si comenta out paramsExample.setMargins

Finalmente ¿qué sucede si usted a txtviewExample.setVisible(View.Visible) después de setLayoutParams ?

Ésas serían las cosas que intentaría si usted no tiene

  • Alineación de un TextView y ImageView dentro de un LinearLayout
  • ¿Cómo usar textview.getLayout ()? Devuelve null
  • Poner texto constante dentro de EditText que no debería ser editable - Android
  • Android define el color de fondo en TextView en styles.xml
  • ¿Cómo dejar que un TextView tenga varias líneas?
  • Android Get Country Emoji Flag utilizando Locale
  • Cómo dibujar correctamente texto en una clase extendida para TextView?
  • AddTextChangedListener con listview con subtexto
  • Sombra larga de Android TextView
  • Android TextView getTextSize () incluye descendientes, ascenders
  • Línea de archivo XML binario # 26: Error al inflacionar la clase android.widget.TextView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.