使用 DialogFragment 实现弹窗2-修改样式

96
画世界
2017.09.10 21:44* 字数 147

Style方式修改

1、添加新的样式,继承自一个 Dialog 基础样式

<style name="Mdialog" parent="android:Theme.Holo.Light.Dialog">
    <item name="android:windowBackground"> @color/black</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

2、在DialogFragment的onCreate方法里进行设置

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Mdialog);
}

代码修改

//在onCreate或者onCreateView都可以
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);  
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.RED));  
getDialog().getWindow().setDimAmount(0.5f);//背景黑暗度  

// 设置宽度为屏宽, 靠近屏幕底部。
Window window = getDialog().getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.BOTTOM; // 紧贴底部
lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度持平
window.setAttributes(lp);

接口支持

控件有一个 setStyle 方法
方法原型:
void setStyle (int style, int theme)
参数:
style: 四个选项: STYLE_NORMAL, STYLE_NO_TITLE, STYLE_NO_FRAME, or STYLE_NO_INPUT.
theme:可选,默认是0

style参数用来设置一些通用设置,但是可能会被theme覆盖

ps: Calling this after the fragment's Dialog is created will have no effect.

参考

Android 撸起袖子,自己封装 DialogFragment
DialogFragment实现底部弹窗
DialogFragmentDemos

Android 开发