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());
}
}
0 Comments