如何在屏幕底部显示DialogFragment对话框,并且与屏幕等宽?

jack
  • 283

对话框默认是在屏幕中间的,想在底部实现对话框,并且可以适配屏幕....

回复
阅读 13k
1 个回答
li21
  • 3.1k
✓ 已被采纳

这应该就是你想实现的位于底部、与屏幕等宽DiaglogFragment了。
(你问题描述里的“适应屏幕”,我理解的是“与屏幕等宽”)
图片描述

自定义一个位于屏幕底部、与屏幕等宽的DialogFragment

public class DatePickerDialog extends DialogFragment {
  @Override
  public Dialog onCreateDialog(Bundle savedInstanceState) {
    // 使用不带theme的构造器,获得的dialog边框距离屏幕仍有几毫米的缝隙。
    // Dialog dialog = new Dialog(getActivity());
    Dialog dialog = new Dialog(getActivity(), R.style.CustomDatePickerDialog);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // must be called before set content
    dialog.setContentView(R.layout.dialog_datepicker);
    dialog.setCanceledOnTouchOutside(true);
    
    // 设置宽度为屏宽、靠近屏幕底部。
    Window window = dialog.getWindow();
    WindowManager.LayoutParams wlp = window.getAttributes();
    wlp.gravity = Gravity.BOTTOM;
    wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
    window.setAttributes(wlp);
 
    return dialog;
  }
<!-- res/values/styles.xml -->
    <style name="CustomDatePickerDialog" 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>
    </style>

一个Demo

我自定义了一个日期选择的DialogFragment,这是它的github地址

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏