關(guān)于安卓DialogFragment使用(一)

關(guān)于安卓DialogFragment基類(lèi)封裝(一)

對(duì)于DialogFragment,在androidX 1.1.0后,已修復(fù)內(nèi)存泄漏

本文內(nèi)容較短,直接上干貨,核心代碼如下:

/**
 * FileName: BaseDialogFragment
 * Author: lzt
 * Date: 2022/8/30 17:33
 * 注意dialog fragment版本,1.1.0以上已修復(fù)內(nèi)存泄漏
 */
public abstract class BaseDialogFragment extends DialogFragment {

    private int DEFAULT_WIDTH = WindowManager.LayoutParams.MATCH_PARENT;//寬
    private int DEFAULT_HEIGHT = WindowManager.LayoutParams.WRAP_CONTENT;//高
    private int DEFAULT_GRAVITY = Gravity.BOTTOM;//位置

    private boolean mCancelable = true;//默認(rèn)可取消
    private boolean mCanceledOnTouchOutside = true;//默認(rèn)點(diǎn)擊外部可取消

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View mView = inflater.inflate(getLayoutId(), container, false);
        initViews(mView);
        return mView;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Dialog mDialog = super.onCreateDialog(savedInstanceState);
        if (null != mDialog) {//初始化
            mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            mDialog.setCanceledOnTouchOutside(mCanceledOnTouchOutside);
            mDialog.setCancelable(mCancelable);
            Window window = mDialog.getWindow();
            if (null != window) {
                window.getDecorView().setPadding(0, 0, 0, 0);
                window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                WindowManager.LayoutParams lp = window.getAttributes();
                lp.width = DEFAULT_WIDTH;
                lp.height = DEFAULT_HEIGHT;
                lp.gravity = DEFAULT_GRAVITY;
                lp.windowAnimations = android.R.style.Animation_InputMethod;
                window.setAttributes(lp);
            }
            mDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
                @Override
                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                    return !mCancelable;
                }
            });
        }
        return mDialog;
    }

    /**
     * 設(shè)置位置
     * @param gravity
     */
    public void setGravity(int gravity) {
        DEFAULT_GRAVITY = gravity;
    }

    /**
     * 設(shè)置寬
     * @param width
     */
    public void setWidth(int width) {
        DEFAULT_WIDTH = width;
    }

    /**
     * 設(shè)置高
     * @param height
     */
    public void setHeight(int height) {
        DEFAULT_HEIGHT = height;
    }

    /**
     * 設(shè)置點(diǎn)擊返回按鈕是否可取消
     *
     * @param cancelable
     */
    public void setCancelable(boolean cancelable) {
        mCancelable = cancelable;
    }

    /**
     * 設(shè)置點(diǎn)擊外部是否可取消
     *
     * @param canceledOnTouchOutside
     */
    public void setCanceledOnTouchOutside(boolean canceledOnTouchOutside) {
        mCanceledOnTouchOutside = canceledOnTouchOutside;
    }

    /**
     * 設(shè)置布局
     *
     * @return
     */
    protected abstract int getLayoutId();

    /**
     * 初始化Views
     *
     * @param v
     */
    protected abstract void initViews(View v);
}

that's all------------------------------------------------------

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容