2010-05-30 19 views
16

Actualmente, estoy tratando de desarrollar una aplicación. y no sé cómo cambiar la fuente Toast. .Cambiar fuente Toast

final OnClickListener clickListener = new OnClickListener() { 

    public void onClick(View v) { 
      try { 
       Toast.makeText(nova.this,"Hello", 500000).show(); 
      } 
      catch (Exception e) { 
       Toast.makeText(nova.this,"Exception:" +e, 500000); 
      } 
     } 
    }; 

Quiero cambiar el texto "Hola" con una fuente personalizada que he probado con TypeFace.

y Entonces, quiero establecer una variable en el lugar "TextClicked" .. He tratado con una variable local .. pero no funciona

ninguna ayuda con el código fuente del ejemplo va a ser muy genial para mi

Respuesta

17

De la documentación oficial:

Create your custom ToastView

Si un mensaje de texto simple no es suficiente, se puede crear un diseño personalizado para su notificación tostadas. Para crear un diseño personalizado, defina un diseño de Vista, en XML o en el código de su aplicación, y pase el objeto de Vista raíz al método setView(View).

El siguiente enlace a la documentación oficial de Google proporcionará ejemplos.

+0

Gracias! Lo tengo. –

2

Desafortunadamente, el código en la página de Java está dañado. Aquí hay un enlace a una función de trabajo que puede implementar que le proporciona el texto (lo sé, porque lo probé), y con un poco de ingenio, podría ampliarse para pasar argumentos de tamaño, color, etc. ...

pan tostado de fuente función de tamaño here

27

La respuesta está aquí: https://stackoverflow.com/a/13231981

Después de un poco de refactorización:

 Toast toast = Toast.makeText(context, R.string.yummyToast, Toast.LENGTH_SHORT); 
    LinearLayout toastLayout = (LinearLayout) toast.getView(); 
    TextView toastTV = (TextView) toastLayout.getChildAt(0); 
    toastTV.setTextSize(30); 
    toast.show(); 

Esto funcionó para mí como un encanto!

+0

Mejor y agradable .... – mghhgm

+0

Esto es arriesgado. Si Google alguna vez decide cambiar el diseño para que el primer niño no sea el TextView, obtendrá una ClassCastException. –

+0

agradable y limpio ...! –

8

Puede utilizar un SpannableString para establecer la fuente:

Typeface font = Typeface.createFromAsset(getAssets(), "fonts/ATaha.ttf"); 
SpannableString efr = new SpannableString("Toast font changed!"); 
efr.setSpan(new TypefaceSpan(font), 0, efr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
Toast.makeText(this, efr, Toast.LENGTH_SHORT).show(); 

Una clase Span personalizada que tiene un conjunto específico de Tipo de letra:

public class TypefaceSpan extends MetricAffectingSpan { 
    private Typeface mTypeface; 
    public TypefaceSpan(Typeface typeface) { 
     mTypeface = typeface; 
    } 

    @Override 
    public void updateMeasureState(TextPaint p) { 
     p.setTypeface(mTypeface); 
     p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG); 
    } 

    @Override 
    public void updateDrawState(TextPaint tp) { 
     tp.setTypeface(mTypeface); 
     tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG); 
    } 
} 
+0

Creo que es la forma más correcta de configurar el tipo de letra Toast y guardar el estilo Toast del sistema. – Nik