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

时间:2013-10-01 11:31:38

标签: java android

在我的Android应用程序中,我有几个radion按钮,应该有不同的颜色,并在选择时变得大胆。我设法通过在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属性。

有人知道如何以粗体显示所选的单选按钮吗?

== EDIT == 我的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>

3 个答案:

答案 0 :(得分:17)

该样式没有选择器:使用一个将破坏构建/运行时或将无效并被忽略。只有两种类型的选择器:用于颜色和用于绘图。

因此,只有一个选项:可以通过监听状态变化来动态应用粗体样式。

===示例===

<强> 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>

drawable / 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>

<强>结果

with bold effect

without bold effect

希望这有帮助。

答案 1 :(得分:-2)

你可以做这样的事情

创建自己的风格,例如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>

答案 2 :(得分:-4)

使用

android:textStyle = "bold"