I have create two XML file. one for Radio Buttons Background selector and second for Radio Buttons text color selector.
1. Create One XML file in "res/drawable/rbtn_selector.xml" add below XML code for Radio Button background.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"><shape>
<solid android:color="#1c5fab" />
<stroke android:width="1dp" android:color="#1c5fab" />
</shape></item>
<item android:state_checked="false"><shape android:shape="rectangle">
<solid android:color="#ffffff" />
<stroke android:width="1dp" android:color="#1c5fab" />
</shape></item>
</selector>
Note : If we have custom background PNG images for radio Button background then create Selector like below(Put your images in "res/drawable" folder). <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_radio_button_checked" android:state_checked="true"/>
<item android:drawable="@drawable/bg_radio_button_unchecked" android:state_checked="false"/>
</selector>
2. Create One XML file in "res/drawable/rbtn_textcolor_selector.xml" add below XML code for Radio Buttons Text selector color.(Text Color Selector xml file)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="#ffffffff"/>
<item android:color="#ff1c5fab"/>
</selector>
3. create XML file in layout folder "res/layout/activity_customradiobutton.xml".
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="10dp" >
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/radioAndroid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/rbtn_selector"
android:button="@null"
android:checked="true"
android:gravity="center"
android:padding="5dp"
android:text="Android"
android:textColor="@drawable/rbtn_textcolor_selector" />
<RadioButton
android:id="@+id/radioiPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/rbtn_selector"
android:button="@null"
android:gravity="center"
android:padding="5dp"
android:text="iPhone"
android:textColor="@drawable/rbtn_textcolor_selector" />
<RadioButton
android:id="@+id/radioWindows"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/rbtn_selector"
android:button="@null"
android:gravity="center"
android:padding="5dp"
android:text="Windows"
android:textColor="@drawable/rbtn_textcolor_selector" />
</RadioGroup>
</LinearLayout>
4. Create on activity java file "CustomRadioButtonActivity.java"I have use setOnCheckedChangeListener for a callback to be invoked when the checked radio button changed in this group.
import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;
public class CustomRadioButtonActivity extends Activity
{
private RadioGroup radioGroup1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customradiobutton);
radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);
// Checked change Listener for RadioGroup 1
radioGroup1.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
switch (checkedId)
{
case R.id.radioAndroid:
Toast.makeText(getApplicationContext(), "Android RadioButton checked", Toast.LENGTH_SHORT).show();
break;
case R.id.radioiPhone:
Toast.makeText(getApplicationContext(), "iPhone RadioButton checked", Toast.LENGTH_SHORT).show();
break;
case R.id.radioWindows:
Toast.makeText(getApplicationContext(), "windows RadioButton checked", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
});
}
}
5. Add your activity class in AndroidManifest.xml file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.limbani.masterapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.limbani.masterapp.CustomRadioButtonActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Doanload Sample Hereenjoy :)
Thank you.

A very good alternative to using tabs.
ReplyDeleteI used this together with fragments. This works great!
Thanks a lot!
how to use it with swipe as in tablayout?
Deletehow can we add swipe functionality as we can have in tablayout?
Deletethanks :)
ReplyDeleteThanks. This helped a lot.
ReplyDeleteThanks it really helped
ReplyDeletecan u share me the source code
ReplyDeleteVery Nice UX
ReplyDeleteThanks
DeleteThank You. You saved me.
ReplyDeleteNice instructions. Thanks a lot for sharing.
ReplyDeleteJust a note, on item 5 fix the spelling of Manifest ;-)
Muito bom!!
ReplyDeleteAwesome! thank you.
ReplyDeleteThank you
DeleteHi
ReplyDeleteThe problem I have is that the image inserted in the radio button does not stretch, that is, it doesn't occupy the whole space of the radio button
thanks!
Nice and elegant solution. Thanks
ReplyDelete