DialogFragment宽度问题处理

来源:互联网 发布:北斗tv有网络电视版吗 编辑:程序博客网 时间:2024/06/10 18:08

看官方文档上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);    }
0 0
原创粉丝点击