記錄一下,自定義AlertDialog的父類,簡單方便

1.主要代碼:

public abstract class CommonConfirmBaseDialog extends AlertDialog {

    //    protected Context mContext;
    protected WeakReference<Context> weakReference;
    protected View mContentView;
    protected TextView tvCancel;
    protected TextView tvConfirm;
    private FrameLayout flContainer;

    protected View mCustomView;
    public ImageView iv_colse;

  protected CommonConfirmBaseDialog(Context context) {
        super(context, R.style.dialog_bond);
        if (context instanceof Application)
            getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
//        mContext = context;
        weakReference = new WeakReference<>(context);
    }

  protected CommonConfirmBaseDialog(Context context) {
        super(context, R.style.dialog_bond);
        if (context instanceof Application)
            getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
//        mContext = context;
        weakReference = new WeakReference<>(context);
    }

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContentView = LayoutInflater.from(obtainContext()).inflate(R.layout.layout_common_confirm_base_dialog, null);
        initViews();
        Window window = getWindow();
        window.getDecorView().setPadding(0, 0, 0, 0);
 WindowManager.LayoutParams lp = window.getAttributes();
        lp.gravity = Gravity.CENTER;
//        lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
        lp.width = getScreenWidth() - dp2px(66);
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
   window.setAttributes(lp);
        setCancelable(false);
        setCanceledOnTouchOutside(false);
        setContentView(mContentView);
    }

    private void initViews() {
        flContainer = (FrameLayout) mContentView.findViewById(R.id.fl_container);
        iv_colse = (ImageView) mContentView.findViewById(R.id.iv_colse);
        tvCancel = (TextView) mContentView.findViewById(R.id.tv_cancel);
  tvConfirm = (TextView) mContentView.findViewById(R.id.tv_confirm);
        tvConfirm.setText("確定");
         tvCancel.setText("取消");
 mCustomView = customView();
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.CENTER_HORIZONTAL;
        mCustomView.setLayoutParams(params);
   if (mCustomView != null) {
            flContainer.addView(mCustomView);
        }
        iv_colse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });
  tvConfirm.setOnClickListener(v -> {
            dismiss();
            if (mAction != null)
                mAction.confirm(this);
        });
        tvCancel.setOnClickListener(v -> {
            dismiss();
            if (mAction != null)
                mAction.cancel(this);
        });
        bindEvent();
    }

  tvConfirm.setOnClickListener(v -> {
            dismiss();
            if (mAction != null)
                mAction.confirm(this);
        });
        tvCancel.setOnClickListener(v -> {
            dismiss();
            if (mAction != null)
                mAction.cancel(this);
        });
        bindEvent();
    }

 public CommonConfirmBaseDialog cancelText(String text) {
        tvCancel.setText(text);
        return this;
    }
    public CommonConfirmBaseDialog action(ConfrimAction action) {
        mAction = action;
        return this;
    }
 public static interface ConfrimAction {
        void confirm(CommonConfirmBaseDialog baseDialog);
        void cancel(CommonConfirmBaseDialog baseDialog);
    }

    public CommonConfirmBaseDialog hideCance() {
        tvCancel.setVisibility(View.GONE);
        return this;
    }

 public CommonConfirmBaseDialog hideConfirm() {
        tvConfirm.setVisibility(View.GONE);
        return this;
    }

    public CommonConfirmBaseDialog hideClose() {
        iv_colse.setVisibility(View.GONE);
        return this;
    }
}

2.佈局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_dialog"
    android:orientation="vertical">

 <ImageView
        android:id="@+id/iv_colse"
        android:layout_gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/pop_close" />

    <FrameLayout
        android:id="@+id/fl_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="20dp" />

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_marginTop="20dp"
        android:gravity="center_horizontal">

  <TextView
            android:id="@+id/tv_cancel"
            android:layout_width="94dp"
            android:layout_height="30dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginRight="28dp"
            android:background="@drawable/bg_dialog_cancel"
            android:gravity="center"
            android:text="@string/cancel"
            android:textColor="@color/dialog_cancel_text"
            android:visibility="visible" />

  <TextView
            android:id="@+id/tv_confirm"
            android:layout_width="94dp"
            android:layout_height="30dp"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/bg_dialog_confirm"
            android:gravity="center"
            android:text="@string/confirm"
            android:textColor="@color/text_chat_text_right" />
    </LinearLayout>
</LinearLayout>

3.代碼中引用其他地方的方法:

  public static int getScreenWidth() {
        WindowManager wm = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE);
        Point point = new Point();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            //noinspection ConstantConditions
            wm.getDefaultDisplay().getRealSize(point);
        } else {
            //noinspection ConstantConditions
            wm.getDefaultDisplay().getSize(point);
        }
        return point.x;
    }
 public static int dp2px( float dpVal) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, InterpHone.getContext().getResources().getDisplayMetrics());
    }

4.styles.xml:

    <style name="dialog_bond" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:windowIsFloating">true</item>
    </style>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章