Android——非常好用、简单实用的通用dialog实现方法

Android中实现dialog的思路方法有很多,默认的、自定义的都有很多方法,每一次都得修修改改,如何偷懒呢?

难道就没有一种通用的dialog吗?

终于,不负众望,不辱使命……

还是先来效果图:

Android——非常好用、简单实用的通用dialog实现方法


Step1:

创建fragment继承DialogFraagment,如果想点击,就自行实现方法即可;

public class xxx extends DialogFragment implements View.OnClickListener{

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // 使用不带Theme的构造器, 获得的dialog边框距离屏幕仍有几毫米的缝隙。
        Dialog dialog = new Dialog(getActivity(), R.style.BottomDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置Content前设定
        dialog.setContentView(R.layout.xxx);
        dialog.setCanceledOnTouchOutside(true); // 外部点击取消
        // 设置宽度为屏宽, 靠近屏幕底部。
        final Window window = dialog.getWindow();
        window.setWindowAnimations(R.style.AnimBottom);
        final WindowManager.LayoutParams lp = window.getAttributes();
        lp.gravity = Gravity.BOTTOM; // 紧贴底部
        lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度持平
        lp.height = (int) (getActivity().getWindowManager().getDefaultDisplay().getHeight() * 0.67);
        window.setAttributes(lp);

        initView(dialog);

        return dialog;
    }

    private void initView(Dialog dialog) {
	...
    }

    @Override
    public void onClick(View view) {

    }
}

<style name="AnimBottom" parent="@android:style/Animation">
    <item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
    <item name="android:windowExitAnimation">@anim/push_bottom_out</item>
</style>

<!--底部弹框-->
<style name="BottomDialog" parent="@style/AppTheme">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>


Step 2:调用


xxxFragment fragment=new xxxFragment();
fragment.show(getCurActivity().getSupportFragmentManager(),"xxxFragment");

搞定了,只需要替换布局文件就行了;