Saturday, November 22, 2025
HomeLanguagesJavaImplement RadioButton with Custom Layout in Android

Implement RadioButton with Custom Layout in Android

RadioButtons allow the user to select one option from a set. You should use RadioButtons for optional sets that are mutually exclusive if you think that the user needs to see all available options side-by-side. In this article, we are going to see how we can implement RadioButton with custom layout in android.

What we are going to build in this article?

Here is a sample video of what we are going to build in this article. Note that we will be using java language to make this project.

Step by Step Implementation

Step 1: Create a New Project

  • Open a new project.
  • We will be working on Empty Activity with language as Java. Leave all other options unchanged.
  • Name the application at your convenience.
  • There will be two default files named activity_main.xml and MainActivity.java.

If you don’t know how to create a new project in Android Studio then you can refer to How to Create/Start a New Project in Android Studio?

Step 2. Adding required dependencies

Navigate to settings.gradle file and use the following piece of code in it

maven {url 'https://jitpack.io'}

Navigate to build.gradle(module) file and add the following dependency to it

implementation 'com.github.worker8:radiogroupplus:1.0.1'

Step 3. Working on the XML file

Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.

XML




<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
  
    <worker8.com.github.radiogroupplus.RadioGroupPlus
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/radio_group"
        android:orientation="vertical"
        android:gravity="center"
        android:padding="16dp">
        
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">
  
            <ImageView
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:src="@drawable/one"/>
            
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="One"
                android:textSize="24sp"
                android:textStyle="bold"
                android:layout_marginStart="16dp"/>
            
            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/radio_button1"/>
              
        </LinearLayout>
        
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">
  
            <ImageView
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:src="@drawable/two"/>
            
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Two"
                android:textSize="24sp"
                android:textStyle="bold"
                android:layout_marginStart="16dp"/>
            
            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/radio_button2"/>
  
        </LinearLayout>
        
          <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">
  
            <ImageView
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:src="@drawable/three"/>
            
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Three"
                android:textSize="24sp"
                android:textStyle="bold"
                android:layout_marginStart="16dp"/>
            
            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/radio_button3"/>
  
        </LinearLayout>
        
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">
  
            <ImageView
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:src="@drawable/four"/>
    
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Four"
                android:textSize="24sp"
                android:textStyle="bold"
                android:layout_marginStart="16dp"/>
    
            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/radio_button4"/>
  
        </LinearLayout>
  
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="16dp">
  
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:id="@+id/bt_reset"
                android:text="Reset"/>
            
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:id="@+id/bt_submit"
                android:text="Submit"/>
  
        </LinearLayout>
  
  
    </worker8.com.github.radiogroupplus.RadioGroupPlus>
  
</androidx.constraintlayout.widget.ConstraintLayout>


Step 4. Working on Java file

Navigate to the MainActivity.java file and use the following code in it. Comments are added to the code to have a better understanding.

Java




package com.example.radiobuttoncustomlayout;
  
import androidx.appcompat.app.AppCompatActivity;
  
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
  
import worker8.com.github.radiogroupplus.RadioGroupPlus;
  
public class MainActivity extends AppCompatActivity {
  
    // Initialize variable
    RadioGroupPlus radioGroupPlus;
    Button btReset,btSubmit;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // Assign variable
        radioGroupPlus=findViewById(R.id.radio_group);
        btReset=findViewById(R.id.bt_reset);
        btSubmit=findViewById(R.id.bt_submit);
  
        btReset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Clear check
                radioGroupPlus.clearCheck();
            }
        });
  
        btSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // get started radio button id
                int id=radioGroupPlus.getCheckedRadioButtonId();
                // Check condition
                switch (id)
                {
                    case R.id.radio_button1:
                        // When id is equal to button
                        // initialize string
                        String s="One";
                        // Display toast
                        displayToast(s);
                        break;
                    case R.id.radio_button2:
                        // When id is equal to button
                        // Display toast
                        displayToast("Two");
                        break;
                     case R.id.radio_button3:
                        // When id is equal to button
                        // Display toast
                        displayToast("Three");
                        break;
                     case R.id.radio_button4:
                        // When id is equal to button
                        // Display toast
                        displayToast("Four");
                        break;
                }
            }
        });
  
        radioGroupPlus.setOnCheckedChangeListener(new RadioGroupPlus.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroupPlus group, int checkedId) {
                // When check the radio button
                // Display toast
                displayToast("Selected Id " + checkedId);
            }
        });
    }
  
    private void displayToast(String s) {
        // Initialize toast
        Toast.makeText(getApplicationContext()
        ,s,Toast.LENGTH_SHORT).show();
    }
}


Here is the final output of our application.

Output:

RELATED ARTICLES

Most Popular

Dominic
32407 POSTS0 COMMENTS
Milvus
97 POSTS0 COMMENTS
Nango Kala
6785 POSTS0 COMMENTS
Nicole Veronica
11932 POSTS0 COMMENTS
Nokonwaba Nkukhwana
12000 POSTS0 COMMENTS
Shaida Kate Naidoo
6907 POSTS0 COMMENTS
Ted Musemwa
7168 POSTS0 COMMENTS
Thapelo Manthata
6864 POSTS0 COMMENTS
Umr Jansen
6852 POSTS0 COMMENTS