2010-04-21 3 views
20

Я хочу изменить текст внутри кнопки, чтобы сделать полужирным, когда кнопка подсвечивается или нажимается. В настоящее время я использую xml-файл для определения кнопки и использования XML для изменения того, как он выглядит при нажатии, но я хотел бы сделать это без использования изображения.Android, как сделать текст кнопки полужирным при нажатии или фокусировке

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

Я попытался использовать что-то вроде следующего, но он, кажется, никогда не вызван.

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

Вы уверены, что он не вызывался? возможно, добавить вызов logcat в метод onfocuschange. Я предполагаю, что его можно назвать много раз (отмена выделенного полужирным шрифтом) – DEzra

ответ

8

Вы можете создать свой собственный style.xml, в котором вы определяете стиль текста. В вашем селекторе вы можете ссылаться на стиль. 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> 

И в вашем селекторе

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

Есть ли какие-либо трюки, чтобы заставить селектор работать со стилем? Я не смог выполнить эту работу в своем коде. –

+0

Теория в этом звучит неплохо, но реальность - это задушить при попытке использовать что-то вроде этого (по крайней мере, на основе моих ограниченных тестов). Я бы хотел сделать что-то похожее на это, и это просто не похоже на что-то прямолинейное. – Joe

+0

И как вы ссылаетесь на селектор из вашего макета? Где вы помещаете свой файл селектора? – ejel

35

Вы можете попробовать поставить жирный код в случае щелчка по кнопке:

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 не находит класс 'Typeface' для меня автоматом. Я должен был ввести «import android.graphics.Typeface;» –

+2

@mickey Спасибо за строку импорта, конечно, это поможет будущим читателям. – DEzra

+1

Невозможно сделать это через XML? – pblead26

1

Стили не допускаются в селекторов. Reference


И сделать текст жирным, используйте этот код:

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; 
    } 
}); 
Смежные вопросы