How to define bold in an Android selector? How to define bold in an Android selector? android android

How to define bold in an Android selector?


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:

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:

<?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]:

<?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:

with bold effect

without bold effect

Hope this helps.


You can do something like this

Create your own style e.g. 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>