如何在Android选择器中定义加粗?

22
在我的Android应用中,我有几个单选按钮,选择后应该变成不同的颜色并加粗。我成功地通过在drawable中定义一个名为radio_pick_color.xml的文件来实现不同的颜色:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- checked -->
     <item android:state_checked="true"
           android:color="#00FF15" /> 
     <!-- default -->
     <item android:color="#4000FF" /> 
</selector>

并在我的main.xml文件中引用此文件:

android:textColor="@drawable/radio_picker_color"

我现在想对文本进行加粗处理,因此我创建了一个名为radio_picker_style.xml的文件,其中我想要定义以下样式:

<item android:state_checked="true"
       android:style="bold" /> 

很遗憾,Eclipse 抱怨在包 'android' 中找不到属性 'style' 的资源标识符。我还尝试了使用 android:textStyle,但是从选择器项目中它也不知道 android:textStyle 属性。

有谁知道我怎样可以使选定的单选按钮加粗?

== 编辑 ==
我的 main.xml 文件的相关部分:

<RadioGroup
    android:id="@+id/radioGroup2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <RadioButton
        android:id="@+id/option_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="@string/option_1"
        android:textColor="@drawable/radio_picker_color"
        />

    <RadioButton
        android:id="@+id/option_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/option_2" 
        android:textColor="@drawable/radio_picker_color"
        />
</RadioGroup>

我试图将radio_picker_style.xml放入drawable文件夹中,但出现了“属性缺少Android命名空间前缀”的错误:

<?xml version="1.0" encoding="utf-8"?>
<style name="mystyle">  
    <item name="android:textColor">#ffffff</item>
    <item name="android:textStyle">bold</item>
</style>

可能是重复的问题:Android自定义按钮;更改文本颜色 - ozbek
3
@shoerat - 这绝对不是您建议的问题的副本。 我知道如何设置颜色,但我无法使文本加粗。 您知道如何使所选文本加粗吗? - kramer65
我所看到的唯一可行的解决方案是在运行时执行... - ozbek
3个回答

23

这个样式没有选择器:使用会导致构建/运行时出错,或者不起作用并被忽略。只有两种类型的选择器:用于颜色和drawable。

因此,唯一的选择是实时应用加粗样式,可能是通过监听检查状态变化来实现。

=== 示例 ===

MainActivity.java:

package com.example.radiobuttontest;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Typeface;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class MainActivity extends Activity implements CompoundButton.OnCheckedChangeListener {
    private RadioGroup mGroup2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mGroup2 = (RadioGroup)findViewById(R.id.radioGroup2);

        RadioButton button1 = (RadioButton)findViewById(R.id.option_1);
        button1.setOnCheckedChangeListener(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        RadioButton checked = (RadioButton)findViewById(mGroup2.getCheckedRadioButtonId());
        checked.setTypeface(Typeface.DEFAULT_BOLD);
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        buttonView.setTypeface(isChecked ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
    }
}

布局/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/radioGroup2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <RadioButton
        android:id="@+id/option_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="@string/option_1"
        android:textColor="@drawable/radio_picker_color" />

    <RadioButton
        android:id="@+id/option_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/option_2"
        android:textColor="@drawable/radio_picker_color" />

</RadioGroup>

可绘制/radio_picker_color.xml [我已将您在问题中使用的颜色(它们非常淡)更改为“#0099CC”以演示目的]

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- checked -->
     <item android:state_checked="true"
         android:color="#0099CC" />
     <!-- default -->
     <item android:color="#0099CC" />
</selector>

结果:

加粗效果

无加粗效果

希望有所帮助。


-4
你可以像这样做:
创建自己的样式,例如mystyle.xml。
<style name="mystyle">  
    <item name="android:textColor">#ffffff</item>
    <item name="android:textStyle">bold</item>
</style>

现在在你的选择器中这样调用它
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item 
      android:state_checked="true"
      style="@style/mystyle" />
</selector>

1
我创建了radio_selected.xml并将您的代码复制粘贴到其中,但它显示“属性缺少Android命名空间前缀”,因此我将所有出现的“name”更改为“android:name”,但它仍然显示该属性缺少android命名空间前缀。此外,它还显示“在布局文件中找到意外文本:#fff”。您有什么想法我在这里做错了吗? - kramer65
请发布完整的XML。 - Jitender Dev
我在我的问题中添加了一些代码。这能告诉你更多吗? - kramer65

-8

使用

android:textStyle = "bold"

1
不好意思,我应该提到,在选择器项目内也无法正常工作。它还说它没有textStyle属性。 - kramer65

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接