根据DialogFragment创建自定义dialog

1,030 阅读1分钟

步骤

  • 新建一个类继承DialogFragment
  • 在onCreateView方法里面inflate 自己写的View(layout布局文件,也可以是代码写的View)
  • 自己写布局文件View,可以直接写dialog的布局,不用在外层加一个铺满屏幕的父布局,然后设置透明,像如下例子1:
    • 例子1
    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="210dp"

    android:layout_height="210dp"
    android:gravity="center"

    android:background="@drawable/bg_select_dlg"
    android:orientation="vertical" >
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="@dimen/network_train_textsize20px"
    android:textColor="@android:color/white"
    android:layout_margin="@dimen/ui_margin_10dp"
    android:text="请选择一个项目:"/>
        <RadioGroup
            android:background="@drawable/bg_rgb_dlg"
            android:layout_width="match_parent"
            android:id="@+id/radiogroub"
            android:layout_height="wrap_content">
            <RadioButton
                android:layout_width="match_parent"
                android:layout_height="@dimen/ui_margin_50dp"
                android:id="@+id/rb1"
                android:text="场考地图"
                android:textSize="@dimen/network_train_textsize24px"
                android:layout_marginLeft="@dimen/ui_margin_10dp"
                android:textColor="@android:color/white"/>
            <RadioButton
                android:layout_width="match_parent"
                android:layout_height="@dimen/ui_margin_50dp"
                android:id="@+id/rb2"
                android:textSize="@dimen/network_train_textsize24px"
                android:text="路考地图"
                android:layout_marginLeft="@dimen/ui_margin_10dp"
                android:textColor="@android:color/white"/>

        </RadioGroup>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/ui_margin_10dp"
            android:text="确定"
            android:textSize="@dimen/network_train_textsize22px"
            android:background="@null"
            android:textColor="@android:color/white"
            android:id="@+id/btn_sure_"/>
</LinearLayout>

DialogFragment弄了一个弹出框,白色背景消不掉

  • 出现的现象:

  • 解决办法
    • 在onCreateView方法里面, getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

示例代码

public class SelectDialog extends DialogFragment implements View.OnClickListener {

    private static final String TAG = "SelectDialog";
    private Button button;
    private RadioButton rb1,rb2;
    private RadioGroup rgb;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        View view = inflater.inflate(R.layout.layout_select_dlg,container,false);
        initView(view);
        return view;
    }

    private void initView(View view) {
        button = view.findViewById(R.id.btn_sure_);
        rgb = view.findViewById(R.id.radiogroub);
        rgb.setOnCheckedChangeListener((RadioGroup group, int checkedId)-> {
            switch (checkedId){
                case R.id.rb1:
                    Log.i(TAG,"第一个被选中");
                    break;
                case R.id.rb2:
                    Log.i(TAG,"第二个被选中");
                    break;
                    default:break;
            }
        });
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_sure_:
                dismiss();
                break;
        }
    }
}