2011-07-31 12 views
6

Estoy desarrollando una aplicación en la que tengo que usar numerosos brindis.android toast no se ajusta al texto

que mostrar estas tostadas usando:

Toast.makeText(context, "Some medium-sized text", Toast.LENGTH_SHORT).show(); 

El visualizador de pan tostado, sin embargo, tiene la altura de una línea, mientras que el texto se muestra en varias líneas. El resultado es que no puedo ver todo el texto en el brindis.

¿Cómo puedo solucionar esto?

Respuesta

28

Intente insertar un retorno de carro y avance de línea donde desee dividir el texto.

Estos caracteres se refieren a los modelos antiguos de máquina de escribir. El retorno del carro fue el cilindro retrocediendo al inicio y el avance de línea fue el cilindro rodando (alimentando) por una línea.

Al calcularlos, estos se representan mediante dos caracteres escapados (códigos especiales que permiten códigos no imprimibles dentro de una cadena prefijándolos con una barra invertida \).

  • Un retorno de carro está representado por \r
  • Una línea de alimentación está representado por \n (que puede recordar esto como una nueva línea).

Algunos sistemas que no son unix (por ejemplo, Windows) requieren ambos, otros (por ejemplo, Linux en el que se basa Android) solo necesitan la nueva línea, pero generalmente es seguro hacerlo en cualquier lugar. La única cosa que es esencial es el orden en que están en Debe ser \r\n

Para poner esto en tu ejemplo:.

Toast.makeText(context, "First line of text\r\nSecond line of text", Toast.LENGTH_SHORT).show(); 

En Android que debería ser capaz de reducir esta a sólo el carácter de nueva línea \n como sistemas basados ​​en UNIX no son tan exigentes:

Toast.makeText(context, "First line of text\nSecond line of text", Toast.LENGTH_SHORT).show(); 
+0

Muchas gracias por su ayuda y explicaciones detalladas. Las dimensiones de la tostada ahora se ajustan al texto. – Gabriel

+0

Esa idea parece no funcionar si la cadena en el mensaje de brindis proviene de PHP echo; si, por ejemplo, tiene eco "puño línea \ nsegunda línea", su aplicación mostrará un mensaje de brindis con "puño linesecond línea", que es un mal cosa, ¿no? – JoeCoolman

0

Usando la idea principal de este Custom toast in android : a simple exampleAndroid's Toast default colors and alpha y esto he desarrollado un simple pan tostado a medida que se parece a la que viene por defecto, pero se envuelve t el texto en multilíneas.

Creo una clase simple con el método estático makeText(context,text,duration), así que solo tuve que reemplazar Toast.makeText con CustomToast.makeText en todos mis proyectos.

A continuación el código

CustomToast.java

public class CustomToast extends Toast{ 
    /** 
    * Construct an empty Toast object. You must call {@link #setView} before you 
    * can call {@link #show}. 
    * 
    * @param context The context to use. Usually your {@link Application} 
    *    or {@link Activity} object. 
    */ 
    public CustomToast(Context context) { 
     super(context); 
    } 

    public static Toast makeText(Context context, CharSequence text, int duration) { 
     Toast t = Toast.makeText(context,text,duration); 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.custom_toast,null); 

     TextView textView = (TextView) layout.findViewById(R.id.text); 
     textView.setText(text); 

     t.setView(layout); 


     return t; 
    } 

} 

La disposición layout/custom_toast.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/custom_toast_layout_id" 
       android:background="@android:drawable/toast_frame" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="horizontal" 
       android:gravity="center_horizontal|center_vertical" 
       android:padding="5dp" > 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_gravity="center_horizontal|center_vertical" 
     android:layout_height="wrap_content" 
     android:singleLine="false" 
     android:layout_weight="1" 
     android:textAppearance="@android:style/TextAppearance.Small" 
     android:textColor="@android:color/background_light" 
     android:shadowColor="#BB000000" 
     android:shadowRadius="2.75"/> 

</LinearLayout> 
Cuestiones relacionadas