可無限巢狀選擇的RadioGroup
NestedSelectionRadioGroup
可無限巢狀選擇的RadioGroup,RadioGroup內部的控制元件選擇狀態完全跟隨外部一起變化,可巢狀ViewGroup,可多行單選
github地址: Android/NestedSelectionRadioGroup" target="_blank" rel="nofollow,noindex">https://github.com/LatoAndroid/NestedSelectionRadioGroup
專案來源
之前在做一個需求的時候,產品經理要求在不同的列,不同的行的一些控制元件全部聯動單選,而且每一個控制元件的樣式都不一樣,另外,在這些控制元件內部,子控制元件也要跟隨變化。所以就有了這個庫
網上有很多類似的文章,但我看了幾篇和幾個github分享後,一是感覺不夠全面(無法滿足所有需求),二是引入的RadioGroup太老,後面懶得找了就自己實現了
這個庫的很大一部分程式碼來自RadioGroup、RadioButton和CompoundLayout,但是他們要不就是無法巢狀,要不就無法多行單選,所以在他的基礎上進行了一些修改與適配
專案效果

Image preview

Image preview2
專案用法
1.NestedRadioGroup繼承LinearLayout,必須作為整體的父控制元件
2.如果子控制元件需要被選中,放入NestedRadioLayout中就可以了,其他不用處理
3.其他用法和radiogroup類似,每個NestedRadioLayout都有自己的setOnCheckedChangeListener方法
引入:
compile 'com.kyle.nestedradiogrouplib:radiogrouplib:1.0.1'
在佈局中
<com.kyle.radiogrouplib.NestedRadioGroup android:id="@+id/nestedGroup" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="不進行選擇的text頭部"/> <!--extends Relativelayout--> <com.kyle.radiogrouplib.NestedRadioLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@drawable/selector_solid_f5f5f9_corner_1dp_solod_ebf1ff_corner_1dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="test" android:textColor="@color/selector_47aefe_3f3f3f"/> </com.kyle.radiogrouplib.NestedRadioLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <com.kyle.radiogrouplib.NestedRadioLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@drawable/selector_solid_f5f5f9_corner_1dp_solod_ebf1ff_corner_1dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="test" android:textColor="@color/selector_47aefe_3f3f3f"/> </com.kyle.radiogrouplib.NestedRadioLayout> </LinearLayout> </com.kyle.radiogrouplib.NestedRadioGroup>
如果需要選擇效果,需要寫帶selected的drawble檔案
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/pop_type_selected" android:state_selected="true"/> <item android:drawable="@drawable/pop_type_not_selected"/> </selector>
監聽事件
group.setOnCheckedChangeListener(new NestedRadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(NestedRadioGroup group, int checkedId) { Log.d("MainActivity", checkedId + ""); } }); private void bindListener(final NestedRadioLayout compoundLayout) { compoundLayout.setOnCheckedChangeListener(new NestedRadioLayout.OnCheckedChangeListener() { @Override public void onCheckedChanged(BaseRadioLayout baseRadioLayout, boolean checked) { if (checked) { if (compoundLayout.getId() == R.id.rl_start_time) { } else if (compoundLayout.getId() == R.id.rl_end_time) { } else if (compoundLayout.getId() == R.id.rl_week) { } else if (compoundLayout.getId() == R.id.rl_month) { } else if (compoundLayout.getId() == R.id.rl_three_month) { } } } }); }
我的簡書: https://www.jianshu.com/u/bb187b559365