使用选择器使TextView变为粗体

时间:2014-06-24 14:23:53

标签: android

当用户按下我的textview时,我想将textview设为粗体。这就是我正在尝试的:

// styles.xml
<style name="TextOn">
    <item name="android:textStyle">bold</item>  
</style>

<style name="TextOff">
    <item name="android:textStyle">normal</item> 
</style>


// my_selector.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="true" style="@style/TextOn" />
  <item android:state_focused="false" android:state_pressed="true" style="@style/TextOn" />
  <item android:state_focused="true" style="@style/TextOn" />
  <item android:state_focused="false" android:state_pressed="false" style="@style/TextOff" />
</selector>


// my textview in a layout
<TextView
  ...
  android:duplicateParentState="true"
  android:textAppearance="@drawable/my_selector" />

将textAppearance设置为选择器drawable似乎不正确,事实上,它没有任何效果。我们怎么做?

由于

3 个答案:

答案 0 :(得分:1)

将样式选择器应用于样式仅适用于颜色和绘图。请在下面的帖子中查看答案。

How to define bold in an Android selector

答案 1 :(得分:0)

“选择器仅适用于绘图,而不适用于文本外观。目前还没有计划实现这一目标。” More Info

答案 2 :(得分:0)

正如Olele所说,你只能选择一个选择器来处理颜色和绘图,但是,你可以&#34;制作&#34;通过使TextView可单击并拦截代码上的触摸事件,在代码中使用自己的选择器。

事实证明这样的事情有效:

    TextView myTextView = (TextView) findViewById(R.id.my_text_view);
    myTextView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {
                // When the user clicks the TextView
                case MotionEvent.ACTION_DOWN:
                    mSwitchLayoutButton.setTypeface(Typeface.DEFAULT_BOLD);
                    break;

                // When the user releases the TextView
                case MotionEvent.ACTION_UP:
                    mSwitchLayoutButton.setTypeface(Typeface.DEFAULT);
                    break;
            }
            return false;
        }
    });