2010-04-21 150 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

你肯定是没有得到叫什么名字?也许可以在onfocuschange方法中添加一个logcat调用。 我猜测它可能被调用很多次(取消粗体) – DEzra 2010-05-09 16:31:18

回答

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

是否有任何技巧可以让选择器使用样式?我无法在我的代码中完成这项工作。 – 2010-06-07 23:14:42

+0

这个理论听起来不错,但是当试图使用像这样的东西(至少基于我有限的测试)时,现实是aapt扼流圈。我希望能够完成与此相似的事情,而且这似乎并不那么简单。 – Joe 2011-06-03 21:26:28

+0

而你如何参考布局中的选择器?你把你的选择器文件放在哪里? – ejel 2012-11-10 01:57:41

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;' – 2014-01-09 14:21:34

+2

@mickey感谢导入行,确定它会帮助未来的读者。 – DEzra 2014-01-10 22:38:06

+1

没办法通过XML来做到这一点? – pblead26 2014-07-08 19:23:01

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; 
    } 
}); 
相关问题