Android RadioGroup多行多列显示

最近做的一个项目中的业务需要一个单选框显示多个选择项,而且需要多行多列显示。

研究了一下谷歌给的demo,需要多个radiogroup协同控制, 这样增加了许多逻辑判断,不是很方便。从网上搜寻到了一些方法结合自己的实际测试,发现一个比较方便的实现方法。

参考:https://blog.csdn.net/nihaoqiulinhe/article/details/53943249

源码:https://github.com/luckylicy/radiogroup

效果如下:

源码如下:

布局文件

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

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="20dp"
        android:background="#000000" />

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <RadioButton
            android:id="@+id/rb_1"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio1" />

        <RadioButton
            android:id="@+id/rb_2"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio2" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#000000" />

        <RadioButton
            android:id="@+id/rb_3"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio3" />

        <RadioButton
            android:id="@+id/rb_4"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio4" />

        <RadioButton
            android:id="@+id/rb_5"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio5" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#000000" />

        <RadioButton
            android:id="@+id/rb_6"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio6" />

        <RadioButton
            android:id="@+id/rb_7"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio7" />

        <RadioButton
            android:id="@+id/rb_8"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio8" />

        <RadioButton
            android:id="@+id/rb_9"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio9" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#000000" />

        <RadioButton
            android:id="@+id/rb_10"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio10" />

        <RadioButton
            android:id="@+id/rb_11"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio11" />

        <RadioButton
            android:id="@+id/rb_12"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio12" />

        <RadioButton
            android:id="@+id/rb_13"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="radio13" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#000000" />
        
    </RadioGroup>

</LinearLayout>

Activity文件

package app.licy.rg.radiogroup;

import android.content.Context;
import android.graphics.Point;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.RadioButton;

import butterknife.BindView;
import butterknife.ButterKnife;

/**
 * MainActivity
 *
 * @author : Licy
 * @date : 2019年4月9日
 * email :[email protected]
 */
public class MainActivity extends AppCompatActivity {

    @BindView(R.id.rb_1)
    RadioButton rb1;
    @BindView(R.id.rb_2)
    RadioButton rb2;
    @BindView(R.id.rb_3)
    RadioButton rb3;
    @BindView(R.id.rb_4)
    RadioButton rb4;
    @BindView(R.id.rb_5)
    RadioButton rb5;
    @BindView(R.id.rb_6)
    RadioButton rb6;
    @BindView(R.id.rb_7)
    RadioButton rb7;
    @BindView(R.id.rb_8)
    RadioButton rb8;
    @BindView(R.id.rb_9)
    RadioButton rb9;
    @BindView(R.id.rb_10)
    RadioButton rb10;
    @BindView(R.id.rb_11)
    RadioButton rb11;
    @BindView(R.id.rb_12)
    RadioButton rb12;
    @BindView(R.id.rb_13)
    RadioButton rb13;

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

        initRadioButtons();

    }

    public void initRadioButtons() {

        WindowManager windowManager = getWindowManager();
        Point point = new Point();
        windowManager.getDefaultDisplay().getSize(point);
        int width = point.x;
        // 这里设置的是radio button的高度
        int height = dpToPx(this, 30);

        LinearLayout.LayoutParams params2 = (LinearLayout.LayoutParams) rb2.getLayoutParams();
        params2.setMargins(width / 2, -height, 0, 0);
        rb2.setLayoutParams(params2);

        LinearLayout.LayoutParams params4 = (LinearLayout.LayoutParams) rb4.getLayoutParams();
        params4.setMargins(width / 3, -height, 0, 0);
        rb4.setLayoutParams(params4);

        LinearLayout.LayoutParams params5 = (LinearLayout.LayoutParams) rb5.getLayoutParams();
        params5.setMargins((width / 3) * 2, -height, 0, 0);
        rb5.setLayoutParams(params5);

        LinearLayout.LayoutParams params7 = (LinearLayout.LayoutParams) rb7.getLayoutParams();
        params7.setMargins(width / 4, -height, 0, 0);
        rb7.setLayoutParams(params7);

        LinearLayout.LayoutParams params8 = (LinearLayout.LayoutParams) rb8.getLayoutParams();
        params8.setMargins((width / 4) * 2, -height, 0, 0);
        rb8.setLayoutParams(params8);

        LinearLayout.LayoutParams params9 = (LinearLayout.LayoutParams) rb9.getLayoutParams();
        params9.setMargins((width / 4) * 3, -height, 0, 0);
        rb9.setLayoutParams(params9);

        LinearLayout.LayoutParams params11 = (LinearLayout.LayoutParams) rb11.getLayoutParams();
        params11.setMargins(width / 4, -height, 0, 0);
        rb11.setLayoutParams(params11);

        LinearLayout.LayoutParams params12 = (LinearLayout.LayoutParams) rb12.getLayoutParams();
        params12.setMargins((width / 4) * 2, -height, 0, 0);
        rb12.setLayoutParams(params12);

        LinearLayout.LayoutParams params13 = (LinearLayout.LayoutParams) rb13.getLayoutParams();
        params13.setMargins((width / 4) * 3, -height, 0, 0);
        rb13.setLayoutParams(params13);

    }

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dpToPx(final Context context, final float dp) {
        return (int) (dp * context.getResources().getDisplayMetrics().density);
    }


}

猜你喜欢

转载自blog.csdn.net/li_chengyang/article/details/89162765