自定义dialog

来源:互联网 发布:德州扑克 技巧 知乎 编辑:程序博客网 时间:2024/05/22 08:13
简单的自定义
自定义dialog首先要继承系统的dialog类,要求必须有一个构造方法
 我们使用2个参数的构造方法,在源码中一个参数的调用2个参数的构造,3个参数的构造调用3个参数的构造,
在第三个构造方法中,会解析一个系统的样式,我们使用第二个构造方法就是为了让系统解析我们定义的样式
public Mydialog(Context context) {    super(context,R.style.MydialogTheme);    mContext = context;}
super走父类的构造方法,传进去一个样式,让系统解析我们的样式
系统的dialog构造方法代码,如果有传进来的样式就会解析传进来的样式
Dialog(@NonNull Context context, @StyleRes int themeResId, boolean createContextThemeWrapper) {    if (createContextThemeWrapper) {        if (themeResId == 0) {            final TypedValue outValue = new TypedValue();            context.getTheme().resolveAttribute(R.attr.dialogTheme, outValue, true);            themeResId = outValue.resourceId;        }        mContext = new ContextThemeWrapper(context, themeResId);    } else {        mContext = context;    }
要传什么样式?找到系统的dialog使用的样试,复制过来根据需求修改下就可以用了
<style name="MydialogTheme" parent="Base.Theme.AppCompat.Light">    <!--是否是浮动显示-->    <item name="android:windowIsFloating">true</item>    <!--背景颜色-->    <item name="android:windowBackground">@android:color/black</item>    <!--设置动画-->    <item name="android:windowAnimationStyle">@style/AnimationDialog</item></style><!--自定义dialog的动画--><style name="AnimationDialog">    <item name="android:windowEnterAnimation">@anim/dialog_enter</item><!--进入动画-->    <item name="android:windowExitAnimation">@anim/dialog_exit</item><!--出去动画--></style>
然后是进出动画
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    >    <translate        android:fromXDelta="0"        android:toXDelta="0"        android:fromYDelta="100%p"        android:toYDelta="0"        android:duration="1000"        android:interpolator="@android:anim/anticipate_overshoot_interpolator"    /></set>
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:interpolator="@android:anim/anticipate_overshoot_interpolator"        android:fromXDelta="0"        android:toXDelta="0"        android:fromYDelta="0"        android:toYDelta="-100%p"        android:duration="1000"    /></set>
最后在要显示的地方显示出来
@Overridepublic void onClick(View v) {    Mydialog dialog = new Mydialog(this);    dialog.setCanceledOnTouchOutside(true);    dialog.show();}

0 0
原创粉丝点击