2010-04-21 13 views
20

Quiero cambiar el texto dentro de un botón para que sea negrita cuando se resalta o presiona el botón. Actualmente utilizo un archivo xml para definir el botón y uso el XML para cambiar su aspecto cuando lo presiono, pero me gustaría hacerlo sin usar una imagen.Android cómo hacer que el texto del botón sea negrita cuando se presiona o se enfoca

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" 
      android:state_pressed="false" 
      android:drawable="@drawable/reset_hover" /> 
    <item android:state_focused="true" 
      android:state_pressed="true" 
      android:drawable="@drawable/reset_hover" /> 
    <item android:state_focused="false" 
      android:state_pressed="true" 
     android:drawable="@drawable/reset_hover" /> 
    <item android:drawable="@drawable/reset" /> 
</selector> 

He intentado utilizar algo como lo siguiente, pero parece que nunca se llama.

final Button btn_reset = (Button) findViewById(R.id.btn_reset); 
    btn_reset.setOnClickListener(this); 
    btn_reset.setOn(new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (hasFocus){btn_reset.setTypeface(null, Typeface.BOLD);} 
     else{btn_reset.setTypeface(null, Typeface.NORMAL);} 
    } 
    }); 
+0

¿Seguro que no está recibiendo llamados? quizás agregue una llamada logcat en el método onfocuschange. Supongo que se puede llamar varias veces (cancelando el negrita) – DEzra

Respuesta

8

Usted puede crear su propia style.xml en el que se define el estilo de texto. En su selector puede hacer referencia al estilo. style.xml

<style name="myStyle"> 
    <item name="android:textSize">9px</item> 
    <item name="android:gravity">center_horizontal</item> 
    <item name="android:textColor">#fff</item> 
    <item name="android:textStyle">bold</item> 
</style> 

Y en su selector de

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_focused="true" 
     android:state_pressed="false" 
     style="@style/myStyle" /> </selector> 
+3

¿Hay algún truco para lograr que un selector funcione con estilo? No he podido hacer que esto funcione en mi código. –

+0

La teoría en esto suena bien, pero la realidad es que se ahoga cuando intento usar algo como esto (al menos en base a mis pruebas limitadas). Me gustaría poder lograr algo similar a esto, y simplemente no parece ser tan directo. – Joe

+0

¿Y cómo hace referencia al selector desde su diseño? ¿Dónde colocas tu archivo de selector? – ejel

35

Usted podría intentar poner el código en negrita dentro del evento Click para el botón:

final Button button = (Button) findViewById(R.id.button_id); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Set bold on click 
       button.setTypeface(null, Typeface.BOLD); 
      } 
     }); 
+0

Eclipse no encuentra automáticamente la clase 'Typeface' para mí. Tuve que escribir 'import android.graphics.Typeface;' –

+2

@mickey Gracias por la línea de importación, seguro que ayudará a los lectores futuros. – DEzra

+1

¿No hay forma de hacerlo a través de XML? – pblead26

1

estilos no están permitidos en los selectores. Reference


Y para hacer el texto en negrita, utilice este código:

btn_reset.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch (event.getAction()) { 
      // When the user clicks the Button 
      case MotionEvent.ACTION_DOWN: 
       btn_reset.setTypeface(Typeface.DEFAULT_BOLD); 
       break; 

      // When the user releases the Button 
      case MotionEvent.ACTION_UP: 
       btn_reset.setTypeface(Typeface.DEFAULT); 
       break; 
     } 
     return false; 
    } 
}); 
Cuestiones relacionadas