DialogFragment宽度问题处理

看官方文档上Dialogs说明时,使用layout进行自定义布局,遇到常见的自定义Dialog宽度处理问题。找到三种方法解决之:

1.跟布局添加minWidth

这个和View的measure有关,View在measure时先会取该minWidth和backgroundDrawable.width。

2.设置Style

直接设置成Theme.holo,该效果是默认Alert.Dialog的宽度效果。

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog_MinWidth);
    }

也可以直接设置为自己的style,该style没有内部Padding,宽度完全为屏幕宽度。DialogFragment内部的默认Theme.Panel不是很实用。

    <style name="AlertDialogStyle" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@style/BottomDialogStyle</item>
    </style>
 //对话框弹出动画
    <style name="BottomDialogStyle" parent="Animation.AppCompat.Dialog">
        <item name="android:windowEnterAnimation">@anim/bottom_in</item>
        <item name="android:windowExitAnimation">@anim/bottom_out</item>
    </style>

3.修改Dialog的LayoutParams

这种方式可操控性强。但也收到Dialog的style的影响。默认的style会有一个全局的Padding,导致宽度不能完全扩展到屏幕。

   @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        WindowManager.LayoutParams attributes = getDialog().getWindow().getAttributes();
        attributes.width = 800;
        attributes.height = -2;
        getDialog().getWindow().setAttributes(attributes);
    }

你可能感兴趣的:(DialogFragment宽度问题处理)