Android Google推荐弹窗 DialogFragment

咋说呢,之前用Dialog里边包一个RecyclerView 然后根据内容设置高度,后来怎么也不行,最后根据list的size数加了几个判断,不了了之

后来终于发现原来是 他娘的布局里边设置background=src  这张图完全把整个布局撑起来了............

于是乎试了一下这个DialogFragment发现这个可以,比较灵活.


public class MyDialogFragment extends DialogFragment {


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View inflate = inflater.inflate(R.layout.mydialog_fragment, null);
        List<String> list = new ArrayList<>();

        list.add("我可能很少------------------------------------早法发顺丰大法师法师法师法师");
        list.add("我可能很少------我可能很少--------------我可能很少-----早法发顺丰大法师法师法师法师");
        list.add("我可能很少------------我可能很少-----------我可能很少---早法发顺丰大法师法师法师法师");
        list.add("我可能很少----------------我可能很少-----我可能很少---早法发顺丰大法师法师法师法师");
        LinearLayout root = inflate.findViewById(R.id.root);

        DevShape.getInstance(DevShape.RECTANGLE)
                .radius(10)
                .line(1, R.color.colorAccent)
                .into(root);


        RecyclerView recyclerView = inflate.findViewById(R.id.recycler);
        MyAdapter myAdapter = new MyAdapter(R.layout.item_recycler_dialogfrag, list);
        recyclerView.setAdapter(myAdapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        return inflate;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        super.onActivityCreated(savedInstanceState);

        //① 设置对话框内的内容为透明
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //② . 将对话框外的内容设置为透明
        Window window = getDialog().getWindow();
        WindowManager.LayoutParams windowParams = window != null ? window.getAttributes() : null;
        windowParams.dimAmount = 0.0f;
        window.setAttributes(windowParams);


    }

    @Override
    public void onResume() {
        super.onResume();
        //动态设置宽高 
        getDialog().getWindow().setLayout(ScreenUtils.getScreenWidth()*5/6, ViewGroup.LayoutParams.WRAP_CONTENT);
    }

    @Override
    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
        return super.onCreateAnimation(transit, enter, nextAnim);
    }
}

设置背景色:

@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        super.onActivityCreated(savedInstanceState);

        getDialog().setCanceledOnTouchOutside(false);
        //① 设置对话框内的内容为透明
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //② . 将对话框外的内容设置为透明
        Window window = getDialog().getWindow();
        WindowManager.LayoutParams windowParams = window != null ? window.getAttributes() : null;
        windowParams.dimAmount = 0.0f;
        window.setAttributes(windowParams);


    }

如果有阴影可以考虑设置内部透明,自己加边框

使用:

MyDialogFragment myDialogFragment = new MyDialogFragment();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        myDialogFragment.show(ft,"ft");

 设置点击隐藏

myAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                getDialog().dismiss();
            }
        });

然而我在项目里

需求:阴影背景/内容圆角

需要不设置外边内容,  内部内容

//① 设置对话框内的内容为透明
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

 

 //② . 将对话框外的内容设置为透明
        Window window = getDialog().getWindow();
        WindowManager.LayoutParams windowParams = window != null ? window.getAttributes() : null;
        windowParams.dimAmount = 0.0f;
        window.setAttributes(windowParams);

动画可以自定义


也可以在使用的时候添加

ft.setCustomAnimations(, )

基本上够用了

猜你喜欢

转载自blog.csdn.net/FlyPig_Vip/article/details/87862051