Android自定义Dialog

来源:互联网 发布:金融数据图 编辑:程序博客网 时间:2024/06/05 11:40

首先我们新建一个自定义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。