美文网首页
深层自定义Dialog

深层自定义Dialog

作者: XINHAO_HAN | 来源:发表于2017-11-01 10:25 被阅读0次

作者:XINHAO_HAN
系统默认的Dialog样式不好看,可能根据不同的项目改动也很大,那么如何自定义一个属于自己的Dialog?
来我们先看一下Dialog的样式
代码

  <style name="MyDialog" parent="Base.V11.Theme.AppCompat.Light.Dialog">
        <item name="android:windowBackground">@drawable/dialog_back</item> <!-- 如果要改变背景颜色请更改此处,我这个默认加了弧度-->
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowCloseOnTouchOutside">true</item>
        <item name="android:backgroundDimEnabled">true</item> <!-- 背景模糊 -->
    </style>

//@drawable/dialog_back

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="#fff"></solid>
    <corners android:radius="8dp"
        android:bottomLeftRadius="8dp"
        android:bottomRightRadius="8dp"></corners>


</shape>

//我的APP样式

Dialog.png

//先继承于一个Dialog起名为随意

public class HxHDialog extends Dialog {

    public HxHDialog(@NonNull Context context) {
        super(context);
    }

    public HxHDialog(@NonNull Context context, @StyleRes int themeResId) {
        super(context, themeResId);//更改此处的样式
    }

}

先给你理一下思路

如果我们要更改一个Dialog,基本上都是更改它的Window,我们看看 setContentView的内部方法


    /**
     * Set the screen content to an explicit view.  This view is placed
     * directly into the screen's view hierarchy.  It can itself be a complex
     * view hierarchy.
     * 
     * @param view The desired content to display.
     */
    public void setContentView(@NonNull View view) {
        mWindow.setContentView(view);//此处是给Window设置布局
    }



//看看这
 final Window w = new PhoneWindow(mContext);
        mWindow = w;

//用的是和Activity一样的Window类,自己明白了木有???

但是你像我上边做出来的基本上窗口大小不固定
但是一般的Dialog有一个"问题",就是根据你的需求Dialog宽度要全屏,就像这样


Dialog_style.png

//一定是要在show之后调用
  @Override
    public void show() {
        super.show();
        getWindow().getDecorView().setPadding(0, 0, 0, 0);..设置padding为0,默认的有padding所以看起来全屏不了
//设置宽和高
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.width = WindowManager.LayoutParams.FILL_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        getWindow().setAttributes(lp);
//在屏幕的那个位置显示
        // getWindow().setGravity(Gravity.TOP);
//设置动画
        getWindow().setWindowAnimations(R.style.Dialog_Anim_Style);
    }

更改Dialog窗口大小

 this.getWindow().setLayout(宽, 高);//必须在show之后调用

如果你想给Dialog加上5.0特效动画

  public void shouWindows(View view) {
        this.showAsDropDown(view);
        this.view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                UIUtils.setViewAnima(XINHAO_HAN_BasePopuWindows.this.view);
                XINHAO_HAN_BasePopuWindows.this.view.removeOnLayoutChangeListener(this);

            }
        });
    }

//  UIUtils.setViewAnima(XINHAO_HAN_BasePopuWindows.this.view);

 //设置动画
    public static void setViewAnima(View view) {

        Animator circularReveal = ViewAnimationUtils.createCircularReveal(view, 0, 0,   
     0, (float) Math.hypot(view.getWidth(), view.getHeight()));
        circularReveal.setDuration(500);
        circularReveal.setInterpolator(new AccelerateInterpolator());
        circularReveal.start();

    }
//就会像画圆一样慢慢扩开视图

就像这样:

持续更新,目前:第一版

2017-11-01-10mzdialog.gif

相关文章

  • Dialog

    安卓dialog的使用+如何自定义dialog自定义Dialog自定义Dialog 自定义

  • 深层自定义Dialog

    作者:XINHAO_HAN系统默认的Dialog样式不好看,可能根据不同的项目改动也很大,那么如何自定义一个属于自...

  • 自定义Dialog

    自定义Dialog的主题 自定义Dialog的布局文件 继承Dialog 并在onCreate方法中将布局设置给D...

  • 实现图片Dialog中带ViewPager

    效果图 实现思路 自定义Dialog,为Dialog添加自定义布局,自定义PagerAdapter以及PageTr...

  • 【Android】自定义全屏dialog

    一、在themes.xml中添加自定义dialog的样式 二、创建dialog基类 三、创建自定义dialog的布...

  • Android圆角对话框Dialog

    需求:模仿iOS样式Dialog对话框。 自定义Dialog 核心代码: Dialog样式: Dialog布局文件...

  • Android自定义Dialog及其点击事件

    在项目开发中,经常要用到dialog。但是系统的dialog太丑,所有我们要自定义dialog。下面的先介绍自定义...

  • 一个漂亮的自定义Dialog

    这是一个自定义的dialog项目 自定义的dialog,具有如下特点 圆角的dialog View 圆形图片的ti...

  • Flutter Dialog 动画

    本文对 Dialog 做一次系统性学习记录,包括系统 Dialog,自定义 Dialog,Dialog 动画。 A...

  • 自定义Dialog

    仿IOS自定义的Dialog: 1、Util帮助类创建dialog 2、布局文件 :loading_dialog....

网友评论

      本文标题:深层自定义Dialog

      本文链接:https://www.haomeiwen.com/subject/glfmpxtx.html