RadioGroup中支持RadioButton多行多列

主要就是重写RadioGroup类:

package zq.com.radiogroupactivity;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;

/**
 * Created by Administrator on 2018/1/17.
 */

public class MyRadioGroup extends RadioGroup {
    private OnCheckedChangeListener mOnCheckedChangeListener;

    public MyRadioGroup(Context context) {
        super(context);
    }

    public MyRadioGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
        mOnCheckedChangeListener = listener;
    }

    @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        if (child instanceof LinearLayout) {
            int childCount = ((LinearLayout) child).getChildCount();
            for (int i = 0; i < childCount; i++) {
                View view = ((LinearLayout) child).getChildAt(i);
                if (view instanceof RadioButton) {
                    final RadioButton button = (RadioButton) view;
                    ((RadioButton) button).setOnTouchListener(new OnTouchListener() {

                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                            ((RadioButton) button).setChecked(true);
                            checkRadioButton((RadioButton) button);
                            if (mOnCheckedChangeListener != null) {
                                mOnCheckedChangeListener.onCheckedChanged(MyRadioGroup.this, button.getId());
                            }
                            return true;
                        }
                    });
                }
            }
        }
        super.addView(child, index, params);

    }

    private void checkRadioButton(RadioButton radioButton) {
        View child;
        int radioCount = getChildCount();
        for (int i = 0; i < radioCount; i++) {
            child = getChildAt(i);
            if (child instanceof RadioButton) {
                if (child == radioButton) {
                    // do nothing
                } else {
                    ((RadioButton) child).setChecked(false);
                }
            } else if (child instanceof LinearLayout) {
                int childCount = ((LinearLayout) child).getChildCount();
                for (int j = 0; j < childCount; j++) {
                    View view = ((LinearLayout) child).getChildAt(j);
                    if (view instanceof RadioButton) {
                        final RadioButton button = (RadioButton) view;
                        if (button == radioButton) {
                            // do nothing
                        } else {
                            ((RadioButton) button).setChecked(false);
                        }
                    }
                }
            }
        }
    }
}
然后就是activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Hello World!"/>

    <FrameLayout
        android:id="@+id/fragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"></FrameLayout>

</LinearLayout>
主类:Mactivity.class

package zq.com.radiogroupactivity;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RadioFragment radioFragment = new RadioFragment();
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.fragment,radioFragment);
        transaction.commit();

//        RadioGroup mRadio = findViewById(R.id.radiogroup);
//        mRadio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
//            @Override
//            public void onCheckedChanged(RadioGroup radioGroup, int i) {
//                Log.e(TAG,"选择:" + i);
//                Toast.makeText(MainActivity.this, "你点击的是按钮" + i, Toast.LENGTH_SHORT).show();
//
//            }
//        });
    }
}
package zq.com.radiogroupactivity;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

/**
 * Created by Administrator on 2018/1/17.
 */

public class RadioFragment extends Fragment {
    private String contextS = "";
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.radiogroup, container, false);
        RadioGroup mRadio = view.findViewById(R.id.radiogroup);
        final RadioButton radio1 = view.findViewById(R.id.radio1);
        final RadioButton radio2 = view.findViewById(R.id.radio2);
        final RadioButton radio3 = view.findViewById(R.id.radio3);
        final RadioButton radio4 = view.findViewById(R.id.radio4);

        mRadio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                /**
                 * 获取每个radiobutton的值不能用原有的方法了,试了一下,原有的方法获取不到值了
                 *  因为这里radiobutton已经不是radiogroup的子view了,
                 *  通过radioGroup.getCheckedRadioButtonId()或者radioGroup.getCheckedRadioButtonId()
                 *  这2个方法都无法获取radiobutton的值了
                 *  所以想了个不成熟的方法
                 */
                switch (i){
                    case R.id.radio1:
                        contextS = radio1.getText().toString();
                        break;
                    case R.id.radio2:
                        contextS = radio2.getText().toString();
                        break;
                    case R.id.radio3:
                        contextS = radio3.getText().toString();
                        break;
                    case R.id.radio4:
                        contextS = radio4.getText().toString();
                        break;
                }

                Toast.makeText(getActivity(), "你点击的是: "+ contextS, Toast.LENGTH_SHORT).show();

            }
        });
        return view;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <zq.com.radiogroupactivity.MyRadioGroup
        android:id="@+id/radiogroup"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <RadioButton
                android:id="@+id/radio1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_margin="10dp"
                android:layout_weight="1"
                android:background="@drawable/button_pressed"
                android:button="@color/transparent"
                android:gravity="center"
                android:text="按钮1"
                android:textColor="@drawable/button_textcolor"/>

            <RadioButton
                android:id="@+id/radio2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_margin="10dp"
                android:layout_weight="1"
                android:background="@drawable/button_pressed"
                android:button="@color/transparent"
                android:gravity="center"
                android:text="按钮2"
                android:textColor="@drawable/button_textcolor"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <RadioButton
                android:id="@+id/radio3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_margin="10dp"
                android:layout_weight="1"
                android:background="@drawable/button_pressed"
                android:button="@color/transparent"
                android:gravity="center"
                android:text="按钮3"
                android:textColor="@drawable/button_textcolor"/>

            <RadioButton
                android:id="@+id/radio4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_margin="10dp"
                android:layout_weight="1"
                android:background="@drawable/button_pressed"
                android:button="@color/transparent"
                android:gravity="center"
                android:text="按钮4"
                android:textColor="@drawable/button_textcolor"/>
        </LinearLayout>

    </zq.com.radiogroupactivity.MyRadioGroup>

</LinearLayout>
上面是radiogroup.xml

button_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_shape_pressed" android:state_checked="true"/>
    <item android:drawable="@drawable/button_shape" android:state_checked="false"/>
    <!--<item android:drawable="@drawable/button_shape_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/button_shape" android:state_pressed="false"/>
    <item android:drawable="@drawable/button_shape_pressed" android:state_selected="true"/>
    <item android:drawable="@drawable/button_shape" android:state_selected="false"/>
    <item android:drawable="@drawable/button_shape_pressed" android:state_enabled="true"/>
    <item android:drawable="@drawable/button_shape" android:state_enabled="false"/>-->

</selector>

button_shape_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="oval"
       android:useLevel="false">
    <solid android:color="@color/red"/>
    <!--<stroke
        android:width="1dp"
        android:color="@color/white"/>-->
    <size android:width="50dp"
          android:height="50dp"/>
</shape>
button_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="oval"
       android:useLevel="false">
    <solid android:color="@color/yellow1"/>
    <!--<stroke
        android:width="1dp"
        android:color="@color/white"/>-->
    <size android:width="50dp"
          android:height="50dp"/>
</shape>
button_textcolor.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white" android:state_checked="true"/>
    <item android:color="@color/black" android:state_checked="false"/>
</selector>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="transparent">#000000</color>
    <color name="white">#FFFFFF</color>
    <color name="black">#000000</color>
    <color name="red">#FF0000</color>
    <color name="yellow">#FFFF00</color>
    <color name="yellow1">#FF9a31</color>
    <color name="blue">#76EE00</color>
    <color name="blue2">#00ff00</color>
    <color name="purple">#B23AEE</color>
    <color name="green">#4876FF</color>
    <color name="pink">#FFBBFF</color>
    <color name="red_pink">#FF66FF</color>
    <color name="blue1">#0050f0</color>
</resources>
demo下载地址:http://download.csdn.net/download/qq_29586601/10212444














猜你喜欢

转载自blog.csdn.net/qq_29586601/article/details/79088453