Android如何在按下或对焦时使按钮文本加粗

Android如何在按下或对焦时使按钮文本加粗,android,Android,我想在突出显示或按下按钮时,将按钮内的文本更改为粗体。我目前使用一个xml文件来定义按钮,并使用xml来更改按下按钮时的外观,但我希望在不使用图像的情况下执行此操作 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true"

我想在突出显示或按下按钮时,将按钮内的文本更改为粗体。我目前使用一个xml文件来定义按钮,并使用xml来更改按下按钮时的外观,但我希望在不使用图像的情况下执行此操作

<?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 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);
             }
         });
注意!请参阅下面的更新
您可以创建自己的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>

9px
水平中心
#fff
大胆的
在你的选择器里

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


更新2020:我的答案已经有10多年了。它不再工作了

选择器中不允许使用样式


要使文本加粗,请使用以下代码:

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

你确定没有人打电话给它吗?也许可以在onfocuschange方法中添加一个logcat调用。我猜它可能会被多次调用(取消粗体),让选择器与样式一起工作有什么诀窍吗?我无法在我的代码中实现这一点。这实际上似乎不可能,因为statelist内容必须是彩色的或可绘制的,并且当xml文件位于values/中时,顶级标记“selector”会抛出一个错误。这个答案不应该被接受,因为它不起作用,或者没有提供足够的信息让它起作用。看来这对OP和其他很多人都有帮助。将此标记为非答案的人应解释标记。我希望这篇文章没有因为听起来不错而被13个人投票支持。这篇文章的风格很好。为什么这是一个公认的答案这个公认的解决方案不起作用!“选择器只适用于可绘图,而不适用于文本外观。目前没有计划实现这一点。”Eclipse没有为我自动找到
字体类。我必须输入
导入android.graphics.Typeface@mickey感谢您的导入行,它肯定会帮助未来的读者。没有办法通过XML来实现吗?
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;
    }
});