自定义DialogFragment的大小
final Window window = getDialog().getWindow();
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
//android.R.id.content这里一定要指定系统的
view = inflater.inflate(ResourceUtil.getLayoutId(getActivity(), "login_main"), ((ViewGroup) window.findViewById(android.R.id.content)),false);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//注意此处
window.setLayout(-1, -2);//自定义dialogframent的宽高
屏蔽点击对话框以外的屏幕和返回键 dialogframent消失
/**
* 屏蔽点击对话框以外的屏幕和返回键 dialogframent消失
* */
public static void shield_back_screen(DialogFragment dialogFragment){
dialogFragment.getDialog().setCanceledOnTouchOutside(false);
dialogFragment.getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) {
if (i == KeyEvent.KEYCODE_BACK) {
/**
* 屏蔽返回键
* */
return true;
}
return false;
}
});
}
在DialogFragment的onstart里面设置,可以将对话框外部的背景设为透明
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.dimAmount = 0.0f;//对话框以外的背景设置
//windowParams.gravity = Gravity.TOP;//设置dialogfragment的显示位置
window.setAttributes(windowParams);
}
设置dialogfragment的显示位置(也是在onstart函数里设置)
windowParams.gravity = Gravity.TOP;
在onstart里设置dialogfragment本身的背景
window.alpha = 1.0f;//0.0f-1.0f 是对话框的背景透明度
在D()ialogFragment的onCreateView里面设置,可以将对话框内部的背景设为透明
getDialog().getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
dialog进入和退出动画
//bottom_out
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0"
android:toYDelta="100%"
android:duration="@android:integer/config_shortAnimTime"
android:interpolator="@android:interpolator/accelerate_quint"
/>
// top_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:duration="10"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="-3"
/>
<translate
android:fromYDelta="-150%"
android:toYDelta="0"
android:duration="@android:integer/config_shortAnimTime"
android:interpolator="@android:interpolator/decelerate_quint"
/>
<rotate
android:startOffset="150"
android:duration="10"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="0"
/>
</set>
// styles
<style name="updateDialog" mce_bogus="1" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/push_top_in</item>
<item name="android:windowExitAnimation">@anim/push_bottom_out</item>
</style>
//使用:在onCreatview中
getDialog().getWindow().getAttributes().windowAnimations = R.style.updateDialog;
或者:底部进入和底部退出
//push_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromYDelta="100%p"
android:toYDelta="0%p" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
//push_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromYDelta="0%p"
android:toYDelta="100%p" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.3" />
</set>
//styles
<style name="dialogAnim" mce_bogus="1" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/dialog_push_in</item>
<item name="android:windowExitAnimation">@anim/dialog_push_out</item>
</style>
//使用 同上
看下效果图:
关于dialog还有很多可扩展的功能,需要自己各位去琢磨了!(例如做一些进入动画)