Android ring shape for radio button

2019-01-26 14:53发布

问题:

I need to create 2 ring shapes for my radio buttons:

  1. white circle
  2. white circle with another circle inside it with a different color

I dont have much clue on how to do this. What I tried so far:

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

    <item android:state_checked="false"><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring">
            <android:solid android:color="@color/white" />

            <android:size android:height="10dp" android:width="10dp" />

            <corners android:radius="10dp" />
        </shape></item>

</selector>

<RadioButton
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:button="@drawable/radio_shape_unchecked"
                        android:checked="false"
                        android:text="Persoana fizica" />

http://i.stack.imgur.com/mltby.png

回答1:

Here is some code for you..You can do something like this. If you have any problem then I can mail you whole project..Hope this helps you and others. !!

res/drawable/red_ring.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:innerRadiusRatio="3"
   android:shape="ring"
   android:thickness="10dp"
   android:useLevel="false" >

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

  <size
    android:height="30dp"
    android:width="30dp" />

</shape>

res/drawable/blue_ring.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:innerRadiusRatio="3"
   android:shape="ring"
   android:thickness="5dp"
   android:useLevel="false" >

  <solid android:color="#0000FF" />

  <size
    android:height="20dp"
    android:width="20dp" />

</shape>

res/drawable/layer.xml

  <?xml version="1.0" encoding="utf-8"?>
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
      <item android:drawable="@drawable/red_ring"/>
      <item android:drawable="@drawable/blue_ring"/>

  </layer-list>

res/drawable/selector_radio.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_checked="true" android:drawable="@drawable/layer"></item>
   <item android:drawable="@drawable/blue_ring"></item>
</selector>

res/layout/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<RadioGroup
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_centerInParent="true"
    android:gravity="center" >

    <RadioButton
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:button="@drawable/selector_radio"
        android:paddingLeft="30dp"
        android:text="Radio 1" />

    <RadioButton
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:button="@drawable/selector_radio"
        android:paddingLeft="30dp"
        android:text="Radio 2" />
   </RadioGroup>

 </RelativeLayout>

Screenshot:



回答2:

The Ketan Ahir solution, not work for me beacouse i need filled background. Finally a made 1 ring shape, and oval shape, and set size when display.

ring shape

 <shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring" android:useLevel="false">
    <solid
        android:color="#fbad38" />
    <stroke
        android:width="2dp"
        android:color="#fbad38" />
   </shape>

Oval Shape

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="oval" android:useLevel="false">
  <solid android:color="#fbad38"></solid>
</shape>

Resizing Code

    frbtRadio1 = (RadioButton) view.findViewById(R.id.radio1);

    frbtRadio1.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            ViewGroup.LayoutParams lp = frbtRadio1.getLayoutParams();
            lp.height = frbtRadio1.getWidth();

            frbtRadio1.setLayoutParams(lp)
            frbtRadio1.getViewTreeObserver().removeOnGlobalLayoutListener( this );
        }
    });