首先我们新建一个自定义Dialog类CustomDialog,并让这个类继承自Dialog类
public class CustomDialog extends Dialog
{
//构造方法
public CustomDialog(Context context,int width,int height,int layout,int style,int gravity,int anim)
{
super(context, style);
//设置属性
setContentView(layout);//布局
Window window=getWindow();
WindowManager.LayoutParams layoutParams =window.getAttributes();
layoutParams.width=width;//布局宽
layoutParams.height=height;//布局高
layoutParams.gravity=gravity;//布局位置
window.setAttributes(layoutParams);
window.setWindowAnimations(anim);//动画
}
}
在这里我们首先为Dialog写一个构造方法,并向这个方法中传入宽、高、和布局等参数。在第一行首先利用父类的构造方法传入上下文以及风格,之后就是利用LayoutParams设置一些Dialog的属性(布局的宽、高以及位置),并且设置好dialog的动画效果。
接着完成Dialog的出入场动画文件pop_out.xml和pop_in.xml,注意这两个文件要单独放在一个叫anim的文件夹中,anim文件夹要和drawable同级,具体的编写方式可以查看博客:
http://www.cnblogs.com/liaojie970/p/5837652.html
<!--出场动画-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="100%"/>
</set>
<!--入场动画-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromXDelta="0"
android:fromYDelta="100%"
android:toXDelta="0"
android:toYDelta="0"/>
</set>
接下来打开style.xml,将Dialog的动画以及风格样式整合进去。
<!--自定义Dialog动画style-->
<style name="pop_anim_style">
<item name="android:windowExitAnimation">@anim/pop_out</item><!--退出动画-->
<item name="android:windowEnterAnimation">@anim/pop_in</item><!--进入动画-->
</style>
<!--自定义Dialog 背景半透明,无标题-->
<style name="Theme_Dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
</style>
然后就是在代码中使用自定义Dialog了。
dialog=new CustomDialog(getActivity(), LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT,
R.layout.dialog_girl,R.style.Theme_Dialog, Gravity.CENTER,R.style.pop_anim_style);//实例化Dialog
......
dialog.show();//显示Dialog
其中dialog_girl就是Dialog的布局文件,如果布局文件中有需要拿来用的控件的话,还需要记得在代码中利用findViewById获取其实例化对象,注意要调用dialog类下的findViewById。