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

2020-04-08  本文已影响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();
    }

}

记录以上代码,用于翻阅
上一篇下一篇

猜你喜欢

热点阅读