2

I have a problem with a customization of RadioButton Widget in Android. I need a RadioButton with an icon and a single line text under the icon. Aspect like at bottom bar in iOS, with icon and text checked in different color. I have created a Custom class the extends RadioButton and inflate my layout.

The widget work fine, but don't show my layout, it show only a background, not imageView and textView. Any idea?

Thanks in advances

public class RadioButtonImageToggle extends RadioButton {

private Drawable imageNormalState, imageCheckedState;
private ImageView imageView;
private TextView textViewTitle;

public RadioButtonImageToggle(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initViews(context,attrs, defStyleAttr);
}

public RadioButtonImageToggle(Context context, AttributeSet attrs) {
    super(context, attrs);
    initViews(context, attrs, 0);
}


private void initViews(Context context, AttributeSet attrs, int defStyle) {


    TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.RadioButtonImageToggle, defStyle, R.style.Widget_Holo_RadioImageToggle);

    try {
        // get the text and colors specified using the names in attrs.xml
        imageNormalState = a.getDrawable(R.styleable.RadioButtonImageToggle_imageNormalState);
        imageCheckedState = a.getDrawable(R.styleable.RadioButtonImageToggle_imageCheckedState);
    } finally {
        a.recycle();
    }
    LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.radio_image_toggle, null);

    imageView = (ImageView) view.findViewById(R.id.iconToggle);
    textViewTitle = (TextView) view.findViewById(R.id.textViewTitle);

    imageView.setImageDrawable(imageNormalState);
    textViewTitle.setText(getText());
}

@Override
public void toggle()
{
    if(isChecked()) {
        imageView.setImageDrawable(imageCheckedState);
        if(getParent() instanceof RadioGroup) {
           ((RadioGroup)getParent()).clearCheck();
        }
    } else {
        imageView.setImageDrawable(imageNormalState);
        setChecked(true);
    }
}

Layout custom is:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:id="@+id/iconToggle"
    android:layout_gravity="center"
    android:src="@mipmap/ic_launcher" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="TITLE"
    android:id="@+id/textViewTitle"
    android:layout_gravity="center"
    android:lines="1"
    android:singleLine="true" />

iNiko84
  • 105
  • 1
  • 6
  • you dont need to code for it i think. you want to change color of text when it checkd right – Vishal Thakkar May 11 '16 at 13:15
  • ya. I think you'll be better using something like http://stackoverflow.com/questions/19163628/adding-custom-radio-buttons-in-android instead of creating your own radiobuttonView, unless there's something else you want to do besides customising the radio button. – Sergio Lima May 11 '16 at 13:22

1 Answers1

0

Just make drawable file for text selector

<?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="@color/que_font"/></selector>

Make another drawable 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="@color/select_btn_bg" />
    <corners
        android:radius="5dp"
        />

    <stroke android:width="1dp" android:color="@color/select_btn_border" />
</shape></item>

<item android:state_checked="false"><shape android:shape="rectangle">
    <!--<solid android:color="@android:color/transparent" />-->
    <solid android:color="@color/default_btn_bg" />
    <corners
        android:radius="5dp"
        />


    <stroke
        android:width="1dp"
        android:color="@color/default_btn_border"
        />

</shape></item></selector>

then just set property like below in your radiobutton

      android:textColor="@drawable/rbtn_text_selector"
    android:background="@drawable/rbtn_background_selector"  
android:button="@null"
Vishal Thakkar
  • 2,117
  • 2
  • 16
  • 33