Radio buttons on click listenener - android

I have radio buttons in an application I am creating. When the user clicks on one option, I want the other radio buttons to be unclickable.
I'm not sure how to do this, the radio buttons are set in an onclick listener and the logic is set within on click.

What about calling setEnabled(false) on the rest of the buttons? If there are too many buttons you can consider putting in an array:
RadioButton[] buttons; //you put here all buttons..
// then, when you catch the click, call a method like this
private void disableOtherButtons(RadioButton buttonClicked)
for(RadioButton button : buttons){
if( button != buttonClicked ){
button.setEnabled(false);
}
}
}

If your using XML you can group them using RadioGroup, in the following example only one of the radio buttons is selectable at a time.
<RadioGroup
android:id="#+id/rg_configup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
>
<RadioButton
android:id="#+id/rb_configup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sales"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
>
</RadioButton>
<RadioButton
android:id="#+id/rb_configup2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Regional"
android:layout_above="#+id/rb_configup1"
android:layout_alignLeft="#+id/rb_configup1"
>
</RadioButton>
<RadioButton
android:id="#+id/rb_configup3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Global"
android:layout_above="#+id/rb_configup2"
android:layout_alignLeft="#+id/rb_configup1"
>
</RadioButton>
<RadioButton
android:id="#+id/rb_configup4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ad-hoc"
android:layout_above="#+id/rb_configup3"
android:layout_alignLeft="#+id/rb_configup1"
>
</RadioButton>
</RadioGroup>

Related

Disable Click on RadioGroup inside layout

I want to disable the clicks on the RadioGroup placed inside the Relative Layout! In a way that my only Relative Layout should be clickable. I want this on some certain condition my XML is as follow:
<RelativeLayout
android:id="#+id/shouldNotPlayLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
android:layout_marginLeft="44dp"
android:layout_marginRight="44dp"
android:layout_marginTop="40dp">
<RadioGroup
android:id="#+id/radio_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:saveEnabled="false">
<RadioButton
android:id="#+id/radio_option_a"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#drawable/radio_option_selector"
android:button="#null"
android:padding="15dp"
android:textColor="#161743"
android:textSize="14sp"
android:textStyle="normal"
tools:text="First option"/>
<RadioButton
android:id="#+id/radio_option_b"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#drawable/radio_option_selector"
android:button="#null"
android:padding="15dp"
android:textColor="#161743"
android:textSize="14sp"
android:textStyle="normal"
tools:text="First option"/>
<RadioButton
android:id="#+id/radio_option_c"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#drawable/radio_option_selector"
android:button="#null"
android:padding="15dp"
android:textColor="#161743"
android:textSize="14sp"
android:textStyle="normal"
tools:text="First option"/>
</RadioGroup>
</RelativeLayout>
I am stopping the clicks on the radio group as:
binding.questionLayout.radioOptionA.setEnabled(false);
binding.questionLayout.radioOptionB.setEnabled(false);
binding.questionLayout.radioOptionC.setEnabled(false);
binding.questionLayout.radioOptionA.setFocusable(false);
binding.questionLayout.radioOptionB.setFocusable(false);
binding.questionLayout.radioOptionC.setFocusable(false);
binding.questionLayout.shouldNotPlayLayout.requestFocus();
binding.questionLayout.shouldNotPlayLayout.setClickable(true);
binding.questionLayout.shouldNotPlayLayout.setFocusable(true);
The Problem I am facing is that sometimes any of these three radio button can still be clickable and the user can click any radio button. But I want to disable the click on the radio group/button and get the click done on the relative layout!
Can somebody please figure any blunders done by me?
Add binding.questionLayout.radio_group.setEnabled(false)
I have made a demo with your requirement & here's what you need,
private void manageEnableState(boolean isEnable) {
radioOptionA.setEnabled(isEnable);
radioOptionB.setEnabled(isEnable);
radioOptionC.setEnabled(isEnable);
radioOptionA.setFocusable(isEnable);
radioOptionB.setFocusable(isEnable);
radioOptionC.setFocusable(isEnable);
shouldNotPlayLayout.setClickable(!isEnable);
shouldNotPlayLayout.setFocusable(!isEnable);
}
Where isEnable is used to set your RadioButton enable state..
Please I giving what you have done but then also please try following the way it will help,
private void enableDisbleRadioGroup(RadioGroup groupId, boolean isEnable) {
for (int i = 0; i < groupId.getChildCount(); i++) {
groupId.getChildAt(i).setEnabled(isEnable);
}
}
In above method pass your radio group id and enable disable mode what you want,

Cannot uncheck radiobutton when used inside two linear layout

I am using two linear layouts to display two rows of radio button 3 in one row and 3 in other row.I have searched and found that we should use radio group. But after using radio group also I am not able to uncheck the radio button when I select a radio button
<RadioGroup
android:id="#+id/payment_mode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
style="#style/LinkButton"
android:id="#+id/cash"
android:text="CASH" />
<RadioButton
style="#style/LinkButton"
android:id="#+id/card"
android:text="CARD" />
<RadioButton
style="#style/LinkButton"
android:id="#+id/pay_tm"
android:text="PAYTM" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<RadioButton
style="#style/LinkButton"
android:id="#+id/bank"
android:text="BANK" />
<RadioButton
style="#style/LinkButton"
android:id="#+id/cc_av"
android:text="CC-AV" />
<RadioButton
style="#style/LinkButton"
android:id="#+id/credit"
android:text="CREDIT" />
</LinearLayout>
</RadioGroup>
From the developers website
To create each radio button option, create a RadioButton in your
layout. However, because radio buttons are mutually exclusive, you
must group them together inside a RadioGroup. By grouping them
together, the system ensures that only one radio button can be
selected at a time.
So the direct parent of the radio button has to be the RadioGroup , in you layout file the direct parent is the LinearLayout. Remove the LinearLayout and place the radiobuttons directly under the RadioGroup.
You can't use any layout inside RadioGroup. You can use only
RadioButton, otherwise RadioButton won't work. RadioButton
should be immediate child of RadioGroup.
Your problem will be solved by changing the orientation of the radioGroup to horizontal.
More info here
For my answer you need not to use the radio group. You just have to set click listener on each radio button. For eg.
RadioButton tempRadioButton; //global variable.
radioButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
if (tempRadioButton != null){
tempRadioButton.setChecked(false);
}
tempRadioButton = (RadioButton) view;
}
});
You can also use this method to set the radio buttons on each item of list view or recyclerview.
Try to change your layout like this and do on click action refer this link:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioGroup
android:id="#+id/payment_mode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:orientation="vertical">
<RadioButton
android:id="#+id/cash"
style="#style/LinkButton"
android:text="CASH" />
<RadioButton
android:id="#+id/card"
style="#style/LinkButton"
android:text="CARD" />
<RadioButton
android:id="#+id/pay_tm"
style="#style/LinkButton"
android:text="PAYTM" />
<RadioButton
android:id="#+id/bank"
style="#style/LinkButton"
android:text="BANK" />
<RadioButton
android:id="#+id/cc_av"
style="#style/LinkButton"
android:text="CC-AV" />
<RadioButton
android:id="#+id/credit"
style="#style/LinkButton"
android:text="CREDIT" />
</RadioGroup>
</LinearLayout>

android layout radiogroup position

I have radiogroup :
<RadioGroup android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:orientation="horizontal"
android:layout_width="match_parent"
android:background="#drawable/overlay_2"
android:id="#+id/rgSettings">`
<RadioButton android:layout_width="140dp"
android:layout_height="100dp"
android:id="#+id/s_mph"
android:background="#drawable/settings_speed_mph"
android:button="#android:color/transparent"
android:layout_gravity="center_vertical|left"/>
<RadioButton android:layout_width="140dp"
android:layout_height="100dp"
android:id="#+id/s_kph"
android:checked="false"
android:background="#drawable/settings_speed_kph"
android:button="#android:color/transparent"
android:layout_gravity="center"
android:gravity="right"/>
</RadioGroup>
Link in screenshot : http://joxi.ru/A5GhUxjKTJBQH7uRaK4
(1) radiogroup
(2) - (3) its radio buttons.
I need radibutton (2) set in position - left, radiobutton (3) set in right position. What do I need for this?
Add:
i need set first button set left position in radiogroup, secondary button set in right position radiogroup. Like This: joxi.ru/FqKhUxjKTJBsH5OWteQ
Why You are setting the button that You need on the left side as first? Just switch it:
<RadioGroup android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="match_parent"
android:background="#drawable/overlay_2"
android:id="#+id/rgSettings">
<RadioButton android:layout_width="140dp"
android:layout_height="100dp"
android:id="#+id/s_kph"
android:checked="false"
android:background="#drawable/settings_speed_kph"
android:button="#android:color/transparent"
android:layout_gravity="center_vertical|left"
android:gravity="right"/>
<RadioButton android:layout_width="140dp"
android:layout_height="100dp"
android:id="#+id/s_mph"
android:background="#drawable/settings_speed_mph"
android:button="#android:color/transparent"
android:layout_gravity="center_vertical|right"/>
</RadioGroup>
Also, You can play a little bit with the layout_margin attributes to make space between the buttons.

Only one radio button selected at a time

I have two radio button in a radio group. I also have 2 androd:button checkbox- for when the radio button is deselected and checkbox_v for when he user selects the checkbox. I also implemnted that a method onRadioButtonClick in order to make sure that only one radio button had drawable:checkbox and the other has checkbox_v . How can I implemnt onRadioClick to do this? any idea?
public void onRadioButtonClick(View v)
{
RadioButton button = (RadioButton) v;
boolean checkBox1Selected;
boolean checkBox2Selected = false;
Toast.makeText(MainActivity.this,
button.getId()+ " was chosen."+R.id.wificheckBox,
Toast.LENGTH_SHORT).show();
if ( button.getId() ==R.id.wificheckBox) {
// Toggle status of checkbox selection
checkBox1Selected = radiowifiButton.isChecked();
// Ensure that other checkboxes are not selected
if (checkBox2Selected) {
radiomobileButton.setChecked(false);
checkBox2Selected = false;
}
else if (button.getId() ==R.id.wifimobilecheckBox) {
// Toggle status of checkbox selection
checkBox2Selected = radiomobileButton.isChecked();
// Ensure that other checkboxes are not selected
if (checkBox1Selected) {
radiowifiButton.setChecked(false);
checkBox1Selected = false;
}
}
}
main xml
<RadioGroup
android:id="#+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="#+id/ll_1"
android:layout_marginLeft="20dp">
<LinearLayout
android:id="#+id/ll_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="#+id/ll_1"
android:layout_marginLeft="20dp"
android:orientation="horizontal" >
<RadioButton
android:id="#+id/wifimobilecheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="#drawable/button_radio"
android:checked="true"
android:onClick="onRadioButtonClick" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="#+id/wificheckBox"
android:layout_toRightOf="#+id/wificheckBox"
android:paddingLeft="15dp"
android:text="WiFi or mobile network"
android:textColor="#333333"
android:textSize="20dp" />
</LinearLayout>
<LinearLayout
android:id="#+id/ll_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="#+id/ll_2"
android:paddingTop="20dp"
android:layout_marginLeft="20dp"
android:orientation="horizontal" >
<RadioButton
android:id="#+id/wificheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="#drawable/button_radio"
android:onClick="onRadioButtonClick" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="#+id/wificheckBox"
android:layout_toRightOf="#+id/wificheckBox"
android:paddingLeft="15dp"
android:text="WiFi "
android:textColor="#333333"
android:textSize="20dp" />
</LinearLayout>
</RadioGroup>
Drawabe- button_radio
<item android:state_checked="true"android:state_pressed="false" android:drawable="#drawable/checkbox_v"/><item android:state_checked="false"android:state_pressed="false"'android:drawable="#drawable/checkbox"/>
If they are in a radiogroup, only one can be selected at a time. If you want both to be able to be selected, remove them from the radiogroup.
As the top voted answer didn't work for me as for many others. I am sharing the method that i used and its working perfectly.
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checkedButton="#+id/rb_female"
android:orientation="horizontal">
<RadioButton
android:id="#+id/rb_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:button="#drawable/selector_radio_button"
android:text="Female" />
<RadioButton
android:id="#+id/rb_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="#drawable/selector_radio_button"
android:text="Male" />
</RadioGroup>
Setting the android:checkedButton="#+id/rb_female" worked for me in RadioGroup.
You should remove your onRadioButtonClick method and add OnCheckedChangeListener to your radiogroup. http://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html
I guess by implementing your own click handler your are overwriting some functionality of the radiogroup.
Your requirement is not clear. Would you mind to make it simpler. I tried my best to understand your requirements and these are the findings given below :(.
A radio button can have text. So you don't have to add another TextView in your layout. Please remove them and add a simple android:text="blah.. blah.." to your radiobutton.
With my understanding you have two doubts.
How to customize RadioButtons with custom drawables??
Checkout the answer here.
How to deselect the previously selected radiobutton??
The truth is you don't have to do it manually as you are keeping those radiobuttons into a single radiogroup.
Hope this will help you.
To check/uncheck radio buttons not part of a RadioGroup,
add a method in the android GUI designer under the
RadioButton Properties 'onClick' (In this example radio1_onClick).
In your activity.xml under the xml for the RadioButton
RadioButton
[blah blah blah]
android:id="#+id/radio1"
android:onClick="radio1_onClick"
In your activity_main.xml you would write the following method.
private void radio1_onClick(View v)
{
CompoundButton b=(CompoundButton)findViewById(R.id.radio1);
b.setChecked(true); /* light the button */
//b.setChecked(false); /* unlight the button */
}

How to change the position of RadioGroup

I am making some exercise to get used to Android dev.
So I'm trying to change the position of a Radiogroup in the layout by having the user press buttons
here is the code I'm using, it actually changes the position, but not by much, it barely moves form the original position when I hit center or right.
else if(group==gravedad)
{
if(checkedId==R.id.izq)
{
gravedad.setGravity(Gravity.LEFT);
}else if(checkedId==R.id.ctr)
{
gravedad.setGravity(Gravity.CENTER);
}else if(checkedId==R.id.der)
{
gravedad.setGravity(Gravity.RIGHT);
}
}
Maybe i messed up the xml...here is how I have set it up
<RadioGroup
android:id="#+id/gravedad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip" >
<RadioButton
android:id="#+id/izq"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Izquierda" />
<RadioButton
android:id="#+id/ctr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Centro" />
<RadioButton
android:id="#+id/der"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Derecha" />
</RadioGroup>
if your api is >11 then you can do like this to change the position of radio group..
RadioGroup r=(RadioGroup)findViewById(R.id.radioGroup1);
r.setX(30);
r.setY(30);

Categories

Resources