Android如何在按下或聚焦时使按钮文本变为粗体

ste*_*ter 20 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"
          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>
Run Code Online (Sandbox Code Playgroud)

我尝试使用类似下面的内容,但它似乎永远不会被调用.

    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);}
    }
   });
Run Code Online (Sandbox Code Playgroud)

DEz*_*zra 36

您可以尝试将粗体代码放在按钮的click事件中:

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);
             }
         });
Run Code Online (Sandbox Code Playgroud)

  • @mickey感谢您的进口线,肯定会有助于未来的读者. (2认同)

Hen*_*nry 6

您可以创建自己的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>
Run Code Online (Sandbox Code Playgroud)

在你的选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
      android:state_pressed="false" 
      style="@style/myStyle" /> </selector>
Run Code Online (Sandbox Code Playgroud)

  • 实际上这似乎不可能,因为状态列表的东西必须是彩色或可绘制的,并且当xml文件在值/时,顶级标记'selector'会抛出错误.这个答案不应该被接受,因为它不起作用,或者没有提供足够的信息来使它起作用. (17认同)
  • 这似乎有助于OP和很多其他人.将此标记为非答案的人应解释该标志.我希望13个人没有对它进行投票,因为它听起来不错. (5认同)
  • 是否有任何技巧让选择器与风格一起工作?我无法在我的代码中完成这项工作. (3认同)
  • 这个被接受的解决方案不起作用!“选择器仅适用于可绘制对象,而不适用于文本外观。目前没有计划实现这一目标。” https://code.google.com/p/android/issues/detail?id=8941 (3认同)