看官方文档上Dialogs说明时,使用layout进行自定义布局,遇到常见的自定义Dialog宽度处理问题。找到三种方法解决之:
这个和View的measure有关,View在measure时先会取该minWidth和backgroundDrawable.width。
直接设置成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>这种方式可操控性强。但也收到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); }新闻热点
疑难解答