Dinámicamente Mostrar el Texto con TextView (Android)

Básicamente lo que quiero hacer en mi Android la aplicación es de uso TextView para mostrar dos piezas diferentes de texto a la vez. Así en el código, quiero ser capaz de hacer algo como esto:

    LinearLayout ll = new LinearLayout(this);
    TextView text = new TextView(this);
    text.setTextColor(0xFF000000);
    text.setGravity(Gravity.CENTER_HORIZONTAL);
    text.setTextSize(20f);
    text.setText("Text1");
    text.setTextSize(14f);
    text.setColor(0xFF0000FF);
    text.setText("\nText2");
    ll.addView(text);

Para aclarar, estoy tratando de mostrar un negro «Texto1» y azul «Text2» a la vez con un solo TextView. Obviamente, esto no funciona utilizando el código anterior. He considerado la posibilidad de utilizar una segunda TextView, pero que parece como un desperdicio de esfuerzo y de memoria de mí. Estoy seguro de que las mentes brillantes de aquí puede venir para arriba con la mejor solución para esto.

Muchas gracias de antemano por su tiempo y su ayuda.

InformationsquelleAutor Rob S. | 2011-01-19

5 Kommentare

  1. 1

    Creo que con la versión actual del código, se puede ver sólo el más reciente de texto (Text2).
    Si desea tener más de una mirada y de la sensación de dos textos, yo sugeriría usar 2 TextViews. Sería añadir más flexibilidad.

    Si usted no la va a cambiar este código UI más tarde, entonces usted puede considerar la posibilidad de Html.toHtml() en setText() la llamada.

    • Como dije en mi pregunta NO quiero usar dos TextViews. Que es un gran desperdicio y mala solución. Escribo RISC (principalmente PPC y ARM) de la asamblea en plataformas embebidas con regularidad que probablemente atributos a mis sentimientos fuertes sobre el tema. No me importa si mi código es «feo» siempre es eficiente (también en mi opinión yo creo que las cosas iban a ser más flexible con menos TextViews). Pero gracias por tu respuesta de la misma.
  2. 0

    Parece que el problema es con:

    LinearLayout.addView(text);

    Usted está tratando de añadir una vista a un LinearLayout, pero el diseño no existe (en la actividad actual). Usted necesita agregar el TextView a un Diseño definido en el .xml está utilizando. Supongamos que usted tiene un LinearLayout con id «linearlayout01» en el archivo xml «activity1.xml» haría algo como:

    setContentView(R.layout.activity1);
    
    //Create and adjust TextView text
    
    ...
    
    LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayout01);
    layout.addView(text);
    • No, usted malentendido completamente de mí. Es probablemente mi culpa; se me estaba genérico para mantener mi código de tamaño. Voy a modificar la pregunta. Suponga que LinearLayout existe y, a continuación, busque en mi pregunta de nuevo. Mi problema no es que el texto no aparece, mi problema es el cambio de texto de forma dinámica.
  3. 0

    Una vez un Ver se agrega a una ViewGroup de que LinearLayout es un descendiente no necesita léelo para actualizar su pantalla. Si usted preforma los cambios en una vista que se requiere para el cambio de su pantalla que se manejan todas las notificaciones apropiadas acerca de la necesaria vuelve a dibujar o relayouts llamando Ver#invalidar y Ver#requestLayout donde corresponda.

    Además, debido a que toda la interfaz de usuario se manejan los cambios en el mismo hilo que usted no necesita preocuparse de llamar a varios métodos de actualización de la interfaz de usuario. Esto es debido a dos razones, la primera, la ejecución de la redibuja no se producirá hasta que su código está terminado, segundo, android tiene optimizaciones construido en el que combina múltiples invalidar las llamadas en una sola.

    Así, la única cosa que usted necesita preocuparse de conseguir una adecuada referencia a su TextView instancia y, a continuación, usted puede llamar a todos los métodos que usted necesita para mostrar lo que usted desea.

    Desde la creación de su Views manualmente y no de xml, debe agregar su raíz ViewGroup a la Actividad llamando Actividad#setContentView.

    Edición:

    Entonces usted va a necesitar para aprender acerca de SpannableString y SpannableStringBuilder. Hay algunos muy breve documentación aquí: La selección, Destacando, o Estilo de Porciones de Texto

    • No, usted no me entiende. Es probablemente mi culpa, voy a tratar de aclarar la cuestión. Quiero mostrar dos diferentes tipos de texto en un render, no en varios renders. Con el código que he publicado anteriormente, sólo «Text2» se representa. Quiero ser capaz de mostrar los «Texto1» y «Text2»
    • La información acerca de la SpannableString debe ser lo que usted está buscando.
    • Si usted tiene cualquier referencia que pudiera proporcionarme en que realmente apreciaría. Gracias.
  4. 0

    ¿cuándo va a actualizar el textview ? Si es que en el clic de un botón, a continuación, obtener una referencia a la textview y en el onClickListener() actualizar el texto, el color, etc lo que usted desea hacer.

    Después de ver tus otros comentarios, creo que SpannableString es lo que usted está buscando

    • Usted no entiende mi pregunta. Lo siento, debe ser mi culpa. No estoy tratando de dibujar texto y, a continuación, cambiar más tarde después de que se produce un Evento. Eso es fácil 😉 estoy tratando de procesar dos piezas diferentes de texto a la vez en el mismo TextView.
    • Después de ver tus otros comentarios, creo que SpannableString es lo que usted está buscando. Consulte developer.android.com/resources/samples/ApiDemos/src/com/… para ver un ejemplo
    • Por el contrario, el frío siempre uso 2 textviews para lograr su tarea 🙂
    • Gracias por el enlace. Si yo no obtener una mejor respuesta de alguien pronto me voy a dar la mejor respuesta. Puede ser porque mis raíces están en C/C++ programación pero SpannableString no se ve como un muy elegante solución por desgracia. Y como he dicho, ya he publicado mi pregunta, un TextView parece ser muy derrochadores y por lo tanto una solución que me gustaría evitar.
    • Otra cosa que puedes hacer es formatear la cadena mediante etiquetas HTML y, a continuación, utilizar Html.fromHtml(String)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea