2010-04-21 20 views
20

Desidero modificare il testo all'interno di un pulsante per essere in grassetto quando il pulsante è evidenziato o premuto. Attualmente utilizzo un file xml per definire il pulsante e uso il codice XML per cambiare il suo aspetto quando viene premuto, ma mi piacerebbe farlo senza usare un'immagine.Android come rendere grassetto il testo del pulsante quando premuto o focalizzato

<?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> 

Ho provato a utilizzare qualcosa di simile al seguente, ma non sembra mai essere chiamato.

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

Sei sicuro che non è sempre chiamato? magari aggiungere una chiamata logcat nel metodo onfocuschange. Immagino che possa essere chiamato più volte (cancellando il grassetto) – DEzra

risposta

8

è possibile creare il proprio style.xml in cui si definisce lo stile del testo. Nel tuo selettore puoi fare riferimento allo stile. 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> 

E nel tuo selettore

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

Ci sono trucchi per far sì che un selettore funzioni con stile? Non sono stato in grado di farlo funzionare nel mio codice. –

+0

La teoria in questo suona bene, ma la realtà è aapt soffoca quando si cerca di utilizzare qualcosa di simile (almeno in base ai miei test limitati). Mi piacerebbe essere in grado di realizzare qualcosa di simile a questo, e non sembra essere così semplice. – Joe

+0

E come si fa a fare riferimento al selettore dal proprio layout? Dove metti il ​​tuo file di selezione? – ejel

35

Si potrebbe provare a mettere il codice in grassetto all'interno dell'evento Click per il pulsante:

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 non trova automaticamente la classe 'Typeface' per me. Ho dovuto digitare 'import android.graphics.Typeface;' –

+2

@mickey Grazie per la linea di importazione, sicuramente aiuterà i futuri lettori. – DEzra

+1

Non c'è modo di farlo attraverso XML? – pblead26

1

stili non sono ammessi nei selettori. Reference


E per rendere il testo in grassetto, utilizzare questo codice:

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; 
    } 
}); 
Problemi correlati