[英]How to define bold in an Android selector?
In my Android app I've got a couple radion buttons which should get a different color and become bold upon selection. 在我的Android应用程序中,我有几个radion按钮,应该得到不同的颜色,并在选择时变得大胆。 I managed to get the different color by defining a radio_pick_color.xml file in drawable:
我通过在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>
and referencing this file in my main.xml file: 并在我的main.xml文件中引用此文件:
android:textColor="@drawable/radio_picker_color"
I now want to do the same for having the text bold. 我现在想要使文本变粗。 So I made another file called radio_picker_style.xml in which I wanted to define the style like this:
所以我创建了另一个名为radio_picker_style.xml的文件,我想在其中定义这样的样式:
<item android:state_checked="true"
android:style="bold" />
Unfortunately eclipse complaints that no resource identifier can be found for attribute 'style' in package 'android'. 不幸的是eclipse抱怨在'android'包中找不到属性'style'的资源标识符。 I also tried with android:textStyle, but from within a selector item it also doesn't know the
android:textStyle
attribute. 我也试过android:textStyle,但是从选择器项中它也不知道
android:textStyle
属性。
Does anybody know how I can get the selected radio button in bold? 有谁知道如何以粗体显示所选的单选按钮?
==EDIT== The relevant part of my main.xml file: == 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>
And the radio_picker_style.xml which I tried to put in drawable folder, but which says "Attribute is missing the Android namespace prefix": 和我试图放在drawable文件夹中的radio_picker_style.xml ,但是“属性缺少Android名称空间前缀”:
<?xml version="1.0" encoding="utf-8"?>
<style name="mystyle">
<item name="android:textColor">#ffffff</item>
<item name="android:textStyle">bold</item>
</style>
The style has no selector: using one will either break the build/runtime or will have no effect and be neglected. 样式没有选择器:使用一个将破坏构建/运行时或将无效并被忽略。 There are only two types of selectors: for colors and for drawables.
选择器只有两种类型:用于颜色和用于绘图。
So, there is only one option: apply bold style on the fly, possibly, by listening to check state changes. 因此,只有一个选项:可以通过监听检查状态更改来动态应用粗体样式。
=== Example === ===示例===
MainActivity.java : 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);
}
}
layout/ activity_main.xml : layout / 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 [I changed colors you have used (they are very faint) in the question with "#0099CC" for demonstration purposes] : 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>
Result : 结果 :
Hope this helps. 希望这可以帮助。
You can do something like this 你可以做这样的事情
Create your own style eg mystyle.xml 创建自己的样式,例如mystyle.xml
<style name="mystyle">
<item name="android:textColor">#ffffff</item>
<item name="android:textStyle">bold</item>
</style>
Now call this in your selector like this 现在在你的选择器中调用它
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
style="@style/mystyle" />
</selector>
使用
android:textStyle = "bold"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.