DialogFragment的简单使用

本次记录第一次使用DialogFragment遇到的问题
项目中遇到的各种弹窗实现有很多中方式,本文简单介绍利用DialogFragment实现。

  1. 首先需要继承DialogFragment,代码如下
package com.yunduo.wisdom.view.widget;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

import com.yunduo.wisdom.R;

/**
 * Created by parade岁月 on 2019/9/20 18:32
 * 退出登录
 */
public class LogoutDialog extends DialogFragment implements View.OnClickListener {

    private Context mContext;
    private View logOut;
    private View exit;
    private onDialogClickListener clickListener;

    public static LogoutDialog newInstance() {
        Bundle args = new Bundle();
        LogoutDialog fragment = new LogoutDialog();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.mContext = context;
    }



    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Dialog dialog = new Dialog(mContext);
        //设置dialog的布局参数和弹出位
        dialog.setContentView(R.layout.dialog_login_out);//自定义布局
        Window window = dialog.getWindow();
        window.setBackgroundDrawableResource(android.R.color.transparent);//宽度占满全屏
        WindowManager.LayoutParams params = window.getAttributes();
        params.width = WindowManager.LayoutParams.MATCH_PARENT;//diaolog的宽占满全屏,必须配合setBackgroundDrawableResource设置透明使用,否则不会宽度全屏
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;//dialog的高
        params.gravity = Gravity.BOTTOM;//设置dialog出现在底部
        window.setAttributes(params);
        logOut = window.getDecorView().findViewById(R.id.custom_logout);
        exit = window.getDecorView().findViewById(R.id.custom_exit);
        logOut.setOnClickListener(this);
        exit.setOnClickListener(this);
        return dialog;
    }

    @Override
    public void onClick(View v) {
        if (clickListener != null){
            clickListener.onClickDialogListener(v);
            dismiss();
        }
    }

    public interface onDialogClickListener{
        public void onClickDialogListener(View view);
    }

   public void setOnDialogClickListener(onDialogClickListener listener){
        this.clickListener = listener;
   }
}


下面说一下我在使用中遇到的两个问题

  1. 设置params.width = WindowManager.LayoutParams.MATCH_PARENT后dialog宽度并不能占满全屏,还需要结合Window window = dialog.getWindow();window.setBackgroundDrawableResource(android.R.color.transparent);使用才能达到宽度满屏的效果。

  2. 设置控件的点击事件

    • 在自定义的DialogFragment中定义回调接口,供在activity或者fragment中使用是设置时间监听

      private onDialogClickListener clickListener;
      
      public interface onDialogClickListener{
              public void onClickDialogListener(View view);
      }
      
      public void setOnDialogClickListener(onDialogClickListener listener){
              this.clickListener = listener;
       }
      
      
    • 找到控件

    • 在控件的点击事件中调用接口的方法

      logOut.setOnClickListener(this);
      exit.setOnClickListener(this);
      
      @Override
      public void onClick(View v) {
          if (clickListener != null){
              clickListener.onClickDialogListener(v);
              dismiss();
          }
      }
      
    • 在ac或者fg中使用接口回调设置点击监听

      dialog.setOnDialogClickListener(new LogoutDialog.onDialogClickListener() {
          @Override
          public void onClickDialogListener(View view) {
              switch (view.getId()) {
                  case R.id.custom_logout:
                      app.dataCenter.clearCache();
                      finish();
                      EventBusUtil.sendEvent(new Event(Constant.EventCode.SETTING));
                      break;
                  case R.id.custom_exit:
                      //退出App,但是没有退出登录
                      ActivityUtils.finishAllActivities();
                      break;
              }
          }
      
发布了62 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/parade0393/article/details/101233656