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.
- Error al seleccionar texto de Textview (java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) comienza antes de 0)
- Uso de varios colores de texto en la vista de texto de Android
- Dibuja un personaje con 2 colores en Android
- Evitar que CAB aparezca en la selección de texto de EditText
- TextView.setText (Android) está causando accidentes .. alguna idea ¿por qué?
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.
- Android TextView measureText para el árabe
- Agregar color "# e3bb87" a StateListDrawable mediante programación
- Centrar el contenido de TextView vertical y horizontalmente - LinearLayout
- ¿Cómo crear una animación cambiante de color? (Androide)
- Android y la velocidad de desplazamiento de la marquesina horizontal de TextView
- Android - epub reader para leer archivos .epub ..
- Android: muestra un cuadro de diálogo emergente cuando se hace clic en una palabra concreta de TextView
- Android.content.res.Resources $ NotFoundException: String resource ID Excepción grave en Main
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
- Definir buildconfigfield para un sabor específico AND buildType
- ¿Puedo usar Cobertura en pruebas de unidad con PowerMock?