Android自定义Dialog

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值