美文网首页
Android 自定义DialogFragment全屏靠下显示问

Android 自定义DialogFragment全屏靠下显示问

作者: 赵泓博 | 来源:发表于2020-04-08 14:20 被阅读0次

    不居中问题

    默认DialogFragment是展示在屏幕中间,并且周围有边距,而需求是贴近底部展示,并且距离左右下屏幕边界0距离

    解决方法

    1.设置样式
    1. 在onCreate中设置样式
    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogFragmentStyle);
    
    
    1. 自定义style修改弹框背景
    <style name="DialogFragmentStyle" parent="@android:style/Theme.Dialog">
        <item name="android:backgroundDimEnabled">true</item><!--activity变暗-->
    </style>
    
    
    2.修改边界
    1. 在onCreateView增加修改边界代码
    // 设置宽度为屏宽、靠近屏幕底部。
    final Window window = getDialog().getWindow();
    window.setBackgroundDrawableResource(R.color.transparent);
    window.getDecorView().setPadding(0, 0, 0, 0);
    WindowManager.LayoutParams wlp = window.getAttributes();
    wlp.gravity = Gravity.BOTTOM;
    wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
    wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
    window.setAttributes(wlp);
    
    

    全部代码如下

    package com.hugboga.custom.fragment;
    
    import android.arch.lifecycle.ViewModelProviders;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.DialogFragment;
    import android.support.v7.app.AppCompatDialogFragment;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.Window;
    import android.view.WindowManager;
    
    import com.hugboga.custom.R;
    import com.hugboga.custom.activity.viewmodel.AssignerGuideViewModel;
    import com.hugboga.custom.widget.CharterFirstCountView;
    
    import butterknife.BindView;
    import butterknife.ButterKnife;
    import butterknife.OnClick;
    import butterknife.Unbinder;
    
    /**
     * 选择出行人数
     * Created by HONGBO on 2018/6/11 20:26.
     */
    public class AssignerGuidePeopleDialog extends AppCompatDialogFragment {
    
        public static final String TAG = AssignerGuidePeopleDialog.class.getSimpleName();
    
        Unbinder unbind; //在fragment中使用需要解绑定
    
        @BindView(R.id.assigner_count_view)
        CharterFirstCountView countLayout;
    
        AssignerGuideViewModel viewModel;
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            viewModel = ViewModelProviders.of(getActivity()).get(AssignerGuideViewModel.class);
            setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogFragmentStyle);
        }
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.assigner_guide_people_diaog_layout, container, false);
            unbind = ButterKnife.bind(this, view);
            // 设置宽度为屏宽、靠近屏幕底部。
            final Window window = getDialog().getWindow();
            window.setBackgroundDrawableResource(R.color.transparent);
            window.getDecorView().setPadding(0, 0, 0, 0);
            WindowManager.LayoutParams wlp = window.getAttributes();
            wlp.gravity = Gravity.BOTTOM;
            wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
            wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
            window.setAttributes(wlp);
            countLayout.setCountViewEnabled(true);
            countLayout.setMaxPassengers(true, 10, true, false, true, "");
            return view;
        }
    
        public static AssignerGuidePeopleDialog newInstance() {
            return new AssignerGuidePeopleDialog();
        }
    
        @Override
        public void onDestroyView() {
            super.onDestroyView();
            unbind.unbind();
        }
    
        @OnClick(R.id.assigner_guide_people_ok)
        public void clickOk() {
            //选择好了人数,点击确认
            AssignerGuideViewModel.ChoosePeopleInfo info = new AssignerGuideViewModel.ChoosePeopleInfo();
            info.adult = countLayout.getAdultValue();
            info.child = countLayout.getChildValue();
            info.seat = countLayout.getChildSeatValue();
            viewModel.setPeopleInfo(info);
            dismiss();
        }
    
    }
    
    
    记录以上代码,用于翻阅

    相关文章

      网友评论

          本文标题:Android 自定义DialogFragment全屏靠下显示问

          本文链接:https://www.haomeiwen.com/subject/rgrtmhtx.html