看官方文檔上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); }新聞熱點
疑難解答