ZDIRY-TUFWT-EBONM-EYJ00-IDBLANTER.COM
ZDIRY-TUFWT-EBONM-EYJ00

BLANTERWISDOM105

Membuat Custom Radio Button Dynamic Android

12/19/2021

Problem

Jika seorang user pada sebuah aplikasi memiliki banyak peran/role dan setiap user mungkin berbeda jumlah dan role yang dimiliki. Role yang dimiliki ini memiliki peran yang sangat penting untuk menentukan, apakah user memiliki otoritas dalam melakukan sebuah perintah tertentu.

Misalkan user akan melakukan approve sebuah data di fungsi approval namun dikarenakan user tersebut memiliki 2 peran sebagai pengguna biasa dan user approve.

Untuk mempermudah user maka perlu ada pilihan dinamis apakah sebagai user biasa atau user approve?

Solusi

Pilihan dinamis ini dapat menggunakan Radio Button namun penggunaan Radio Button ini harus tetap memperhatikan User Interface. Apakah memudahkan dan enak di lihat oleh user atau tidak? Oleh karena itu, Agung Code memberikan satu contoh tampilan Custom Radio Button Dynamic seperti di bawah ini,


Dari tampilan di atas kita dapat membuat beberapa Radio button sejumlah data yang di inputkan di EditText dan dapat di Get Value setiap Radio Button yang di pilih.

Pertama, yang harus di siapkan adalah file style terlebih dahulu yang di Create XML di Drawable.


	<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#0394fc" />

    <stroke
        android:width="3dp"
        android:color="#ff848482" />

    <corners android:radius="15dp" />

</shape>

	<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#ff00ff00" />

    <stroke
        android:width="3dp"
        android:color="#ff00ff00" />
    <corners android:radius="15dp" />
</shape>

	<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="#ffffffff" android:state_checked="true"/>
    <item android:color="#ff848482" android:state_checked="false"/>

</selector>

	<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/radio_on_green" android:state_checked="true" android:state_pressed="false"/>
    <item android:drawable="@drawable/radio_off" android:state_checked="false" android:state_pressed="false"/>

</selector>

Kedua, Declare Edittext, Button, RadioGroup, dan Radio Button

EditText mEtNumOfRadioBtns;

Button mBtnAdd,mBtnGet;

String TAG = "TestActivity";

RadioGroup mRgAllButtons;

RadioButton radioButton;

Ketiga, Fungsi untuk membuat Radio Button dinamis
 
@SuppressLint("ResourceType")
public void addRadioButtons(int number) {
    mRgAllButtons.setOrientation(LinearLayout.HORIZONTAL);
    //
    /*LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
    );
    params.setMargins(100, 0, 100, 0);*/

    for (int i = 1; i <= number; i++) {
        RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        params.setMargins(15, 15, 15, 15);

        RadioButton rdbtn = new RadioButton(this);
        rdbtn.setId(View.generateViewId());
        rdbtn.setWidth(200);
        rdbtn.setButtonDrawable(0);
        rdbtn.setLayoutParams(params);
        rdbtn.setGravity(Gravity.CENTER); //text diletakan di tengah
        rdbtn.setBackground(ContextCompat.getDrawable(this,R.drawable.radio_states_green));
        rdbtn.setTextColor(ContextCompat.getColor(this, R.drawable.radio_text));
        rdbtn.setText("Radio " + rdbtn.getId());
        rdbtn.setOnClickListener(this);
        rdbtn.setButtonDrawable(0); //Menghilangkan lingkaran Radio
        mRgAllButtons.addView(rdbtn);
    }

    mRgAllButtons.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // checkedId is the RadioButton selected
            RadioButton rb=(RadioButton)findViewById(checkedId);
            Toast.makeText(MainActivity.this, rb.getText(),
                    Toast.LENGTH_LONG).show();
        }
    });
} 

Untuk coding lengkapnya ada di bawah ini,

package com.example.customdynamicradiobutton;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    EditText mEtNumOfRadioBtns;
    Button mBtnAdd,mBtnGet;
    String TAG = "TestActivity";
    RadioGroup mRgAllButtons;
    RadioButton radioButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //
        mEtNumOfRadioBtns = findViewById(R.id.et_no);
        mBtnAdd = findViewById(R.id.btn);
        mBtnGet = findViewById(R.id.btnGetvalue);
        mRgAllButtons = findViewById(R.id.radiogroup);
        //
        mBtnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int number = Integer.parseInt(mEtNumOfRadioBtns.getText().toString().trim());
                addRadioButtons(number);
            }
        });

        mBtnGet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int selectedId = mRgAllButtons.getCheckedRadioButtonId();

                // find the radiobutton by returned id
                radioButton = (RadioButton) findViewById(selectedId);
                Toast.makeText(MainActivity.this, radioButton.getText(),
                        Toast.LENGTH_LONG).show();
            }
        });
    }

    @SuppressLint("ResourceType")
    public void addRadioButtons(int number) {
        mRgAllButtons.setOrientation(LinearLayout.HORIZONTAL);
        //
        /*LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
        );
        params.setMargins(100, 0, 100, 0);*/

        for (int i = 1; i <= number; i++) {
            RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            params.setMargins(15, 15, 15, 15);

            RadioButton rdbtn = new RadioButton(this);
            rdbtn.setId(View.generateViewId());
            rdbtn.setWidth(200);
            rdbtn.setButtonDrawable(0);
            rdbtn.setLayoutParams(params);
            rdbtn.setGravity(Gravity.CENTER); //text diletakan di tengah
            rdbtn.setBackground(ContextCompat.getDrawable(this,R.drawable.radio_states_green));
            rdbtn.setTextColor(ContextCompat.getColor(this, R.drawable.radio_text));
            rdbtn.setText("Radio " + rdbtn.getId());
            rdbtn.setOnClickListener(this);
            rdbtn.setButtonDrawable(0); //Menghilangkan lingkaran Radio
            mRgAllButtons.addView(rdbtn);
        }

        mRgAllButtons.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // checkedId is the RadioButton selected
                RadioButton rb=(RadioButton)findViewById(checkedId);
                Toast.makeText(MainActivity.this, rb.getText(),
                        Toast.LENGTH_LONG).show();
            }
        });
    }

    @Override
    public void onClick(View v) {
        Log.d(TAG, " Name " + ((RadioButton)v).getText() +" Id is "+v.getId());
    }
}
Share This :

0 Comments