自定义的单选dialog
一.自定义的一个dialog /** * 自定义单选dialog * @author Murg * @date 2019/3/19 */ public class RadioDialog implements View.OnClickListener { Dialog mRadioDialog; private TextView mBtnOk; private TextView mBtnCancel; private View.OnClickListener okOnClickListener; private View.OnClickListener cancelOnClickListener; String item;//选择的选项值 public void setOkOnClickListener(View.OnClickListener okOnClickListener) { this.okOnClickListener = okOnClickListener; } public void setCancelOnClickListener(View.OnClickListener cancelOnClickListener) { this.cancelOnClickListener = cancelOnClickListener; } public String getItem() { return item; } public RadioDialog(Activity context, String prompt, String okName, String caName) { // 首先得到整个View View view = LayoutInflater.from(context).inflate( R.layout.radio_dialog, null); // 页面中显示文本 TextView mPrompt = view.findViewById(R.id.text_title); //单选组 RadioGroup radioGroup=view.findViewById(R.id.radio_dialog_radiogroup); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { //获取选择的选项,取值 RadioButton rb = view.findViewById(radioGroup.getCheckedRadioButtonId()); item=rb.getText().toString(); } }); mBtnOk = view.findViewById(R.id.button_ok); mBtnCancel = view.findViewById(R.id.button_cancel); // 显示文本 mPrompt.setText(prompt); mBtnOk.setText(okName); mBtnCancel.setText(caName); mBtnOk.setOnClickListener(this); mBtnCancel.setOnClickListener(this); // 创建自定义样式的Dialog mRadioDialog = new Dialog(context, R.style.loading_dialog); int w = context.getWindowManager().getDefaultDisplay().getWidth(); view.setMinimumWidth(w * 4 / 5);//设置dialog的宽度 // 设置返回键无效 mRadioDialog.setCancelable(false);
mRadioDialog.setContentView(view, new ActionBar.LayoutParams(//设置dialog android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); } public void show() { if (!mRadioDialog.isShowing()){ mRadioDialog.show(); } } public void close() { if (mRadioDialog != null) { mRadioDialog.dismiss(); mRadioDialog = null; } } @Override public void onClick(View view) { switch (view.getId()) { case R.id.button_cancel: if (cancelOnClickListener != null) { cancelOnClickListener.onClick(view); } break; default: if (okOnClickListener != null) { okOnClickListener.onClick(view); } break; } } }
二、自定义的Dialgo的style
<style name="loading_dialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
三、布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@android:style/Theme.Dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/newfolder_dilaog_back"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/text_title"
android:layout_width="match_parent"
android:layout_height="@dimen/title_tab"
android:gravity="center"
android:text="送达结果"
android:textColor="@color/text_color"
android:textSize="@dimen/content_text" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/lines_weight_2px"
android:background="@color/activity_background" />
</FrameLayout>
<RadioGroup
android:id="@+id/radio_dialog_radiogroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:paddingLeft="@dimen/height_30dp"
android:paddingRight="@dimen/height_30dp">
<RadioButton
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginBottom="8dp"
android:background="@drawable/radiobutton_select_backgroud"
android:button="@null"
android:gravity="center"
android:padding="4dp"
android:text="完成"
android:textColor="@color/radiobutton_text_select_backgroud"
android:textSize="@dimen/textsize15" />
<RadioButton
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginBottom="8dp"
android:background="@drawable/radiobutton_select_backgroud"
android:button="@null"
android:gravity="center"
android:padding="4dp"
android:text="拒收"
android:textColor="@color/radiobutton_text_select_backgroud"
android:textSize="@dimen/textsize15" />
<RadioButton
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginBottom="8dp"
android:background="@drawable/radiobutton_select_backgroud"
android:button="@null"
android:gravity="center"
android:padding="4dp"
android:text="留置"
android:textColor="@color/radiobutton_text_select_backgroud"
android:textSize="@dimen/textsize15" />
<RadioButton
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginBottom="16dp"
android:background="@drawable/radiobutton_select_backgroud"
android:button="@null"
android:gravity="center"
android:padding="4dp"
android:text="其他"
android:textColor="@color/radiobutton_text_select_backgroud"
android:textSize="@dimen/textsize15" />
</RadioGroup>
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/lines_weight_2px"
android:background="@color/text_color" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/button_cancel"
android:layout_width="0dp"
android:layout_height="@dimen/title_tab"
android:layout_weight="1"
android:background="@drawable/button_cancel_selector_back"
android:gravity="center"
android:padding="10dp"
android:text="取消"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/content_text" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginBottom="2dp"
android:layout_marginTop="2dp">
<TextView
android:layout_width="@dimen/lines_weight_2px"
android:layout_height="match_parent"
android:background="@color/text_color" />
</FrameLayout>
<TextView
android:id="@+id/button_ok"
android:layout_width="0dp"
android:layout_height="@dimen/title_tab"
android:layout_weight="1"
android:background="@drawable/button_ok_selector_back"
android:gravity="center"
android:padding="10dp"
android:text="确定"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/content_text" />
</LinearLayout>
</LinearLayout>
四、单选按钮的background
再drawable下创建新的xml文件
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/radiobutton_background_unchecked" android:state_checked="false" />
<item android:drawable="@drawable/radiobutton_background_checked" android:state_checked="true" />
</selector>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充 -->
<solid android:color="@color/colorPrimary" />
<!-- 圆角 -->
<corners android:radius="24dp" />
</shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充 -->
<solid android:color="@color/activity_background" />
<!-- 圆角 -->
<corners android:radius="24dp" />
</shape>
五、单选按钮文字颜色
再res创建color文件夹,新建xml文件
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/text_color"
android:state_checked="false" />
<item android:color="@color/text_color_white"
android:state_checked="true" />
</selector>
六、java代码中使用
RadioDialog radioDialog=new RadioDialog(this,"送达结果","确定","取消");
radioDialog.show();
radioDialog.setCancelOnClickListener(v -> radioDialog.close());
radioDialog.setOkOnClickListener(v -> {
String item=radioDialog.getItem();
Toast.makeText(context,item,Toast.LENGTH_SHORT).show();
radioDialog.close();
});