自定义圆形dialog

###自定义弹出圆角框
不多说,直接上效果图


关键代码:

  1. 在自己的style中定义一个style

    <!--弹出时间选择的dialog背景-->
    <style name="mydialog" parent="android:style/Theme.Dialog">
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 没有标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 背景模糊 -->
        <item name="android:backgroundDimEnabled">true</item>
    </style>
    
  2. 编写自定义dialog类,继承自dialog

    /**
     * 描述: 选择日期时间类
     * 作者:Marc on 2016/11/3 13:56
     * 邮箱:aliali_ha@yeah.net
     */
    public class MyTimePickerDialog extends Dialog {
    
        private TextView positiveButton, negativeButton;
        private View view;
        private WLQQTimePicker timePickerStart;
        private Display display;
    
        public MyTimePickerDialog(Context context) {
            super(context, R.style.mydialog);
            WindowManager windowManager = (WindowManager) context
                    .getSystemService(Context.WINDOW_SERVICE);
            display = windowManager.getDefaultDisplay();
            view = LayoutInflater.from(getContext()).inflate(R.layout.item_timepicker, null);
            LinearLayout lLayout_bg = (LinearLayout) view.findViewById(R.id.lLayout_bg);
            timePickerStart = (WLQQTimePicker) view.findViewById(R.id.timepicker);
            positiveButton = (TextView) view.findViewById(R.id.confirm);
            negativeButton = (TextView) view.findViewById(R.id.cancel);
            timePickerStart.setDate(new Date().getTime());
            setContentView(view);
            // 调整dialog背景大小
            lLayout_bg.setLayoutParams(new FrameLayout.LayoutParams((int) (display
                    .getWidth() * 0.85), LinearLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER));
    
        }
    
    //确定按钮监听
    public MyTimePickerDialog setOnPositiveListener(View.OnClickListener listener) {
        positiveButton.setOnClickListener(listener);
        return this;
    }

    public WLQQTimePicker getTimePicker() {
        if (timePickerStart != null) {
            return timePickerStart;
        }
        return null;
    }

    /**
     * 取消监听按钮
     *
     * @param listener
     */
    public MyTimePickerDialog setOnNegativeListener(View.OnClickListener listener) {
        negativeButton.setOnClickListener(listener);
        return this;
    }
}
  1. 其中view的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lLayout_bg"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/time_bg"
    android:gravity="center"
    android:orientation="vertical">

    <!-- 这里要注意,wrap_content,会显示不出来,
        我这里显示出来时因为我的WLQQTimePicker里面也加载的布局给定了个具体高度值-->

    <com.marc.aatmonitol.widget.WLQQTimePicker
        android:id="@+id/timepicker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
  1. 圆角drawable

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <solid android:color="@android:color/white" />
        <corners android:radius="14dp" />
    </shape>
    
  2. 使用

    dialog = new MyTimePickerDialog(MissonContainerActivity.this);
                dialog.setCanceledOnTouchOutside(false);//外部不能取消
                dialog.setOnNegativeListener(v ->
                        dialog.dismiss()
                ).setOnPositiveListener(v -> {
                    endTime = dialog.getTimePicker().getmPickerTitle().getText().toString();
                    showToast(endTime);
                    tvMissionEndTime.setText(endTime);
                    dialog.dismiss();
                }).show();
    

第二章图显示的是recycleivew加4个edittext,每个editeext不抢夺焦点,主要给每个editext设置
android:focusable=”true”

android:focusableInTouchMode=”true”

这2个属性