美文网首页
DialogPlus原理

DialogPlus原理

作者: Alien的小窝 | 来源:发表于2016-07-17 00:21 被阅读342次

DialogPlus 源码分析

简化后的代码如下

package com.ty.helloworld;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;

public class MainActivity extends AppCompatActivity {

    private ViewGroup decorView;
    private ViewGroup rootView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



    }

    public void showdialog(){

//        DialogPlus.newDialog(this)
//                .setContentHolder(new ViewHolder(R.layout.item_dialog))
//                .setGravity(Gravity.BOTTOM)
//                .create().show();

        Animation  inAnim = AnimationUtils.loadAnimation(this, R.anim.slide_in_bottom);
        Animation outAnim= AnimationUtils.loadAnimation(this, R.anim.slide_out_bottom);


        LayoutInflater layoutInflater = LayoutInflater.from(this);
//        decorView = (ViewGroup) this.getWindow().getDecorView().findViewById(android.R.id.content);
        decorView = (ViewGroup) this.getWindow().getDecorView();
        rootView = (ViewGroup) layoutInflater.inflate(R.layout.rootview, decorView, false);
//        rootView.setLayoutParams(); //设置布局参数

        View outmostView = rootView.findViewById(R.id.dialogplus_outmost_container); //  第一个FrameLayout,设置背景颜色用的
        outmostView.setBackgroundResource(R.color.dialogplus_black_overlay); // 0x7f0b0015

         ViewGroup  contentContainer = (ViewGroup) rootView.findViewById(R.id.dialogplus_content_container); //第二个FrameLayout,存放内容用的
//        contentContainer.setLayoutParams(); 设置布局参数

//        初始化各种布局等参数
        initContentView(contentContainer);


//  show      onAttached(rootView);
        decorView.addView(rootView);
//  show      onAttached(rootView);

        contentContainer.startAnimation(inAnim);
        contentContainer.requestFocus();

////        dimiss
//        contentContainer.startAnimation(outAnim);
//        decorView.removeView(rootView);
//


    }

    private void initContentView(ViewGroup contentContainer) {
        View contentView = getLayoutInflater().inflate(R.layout.contentview, null);
//        contentView.setLayoutParams();
        contentContainer.addView(contentView);

    }


    public void show(View view) {
        showdialog();
    }

    @Override
    public void onBackPressed() {
        decorView.removeView(rootView);
    }
}


容器rootview.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:id="@+id/dialogplus_outmost_container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/dialogplus_black_overlay"
    android:clickable="true"
    >

    <FrameLayout
        android:id="@+id/dialogplus_content_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        >
    </FrameLayout>

</FrameLayout>

内容布局contentview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#ff0"
    android:orientation="vertical" android:layout_width="wrap_content"
    android:layout_gravity="center"
    android:layout_height="wrap_content">

    <TextView
        android:gravity="center"
        android:text="这是内容啊"
        android:layout_width="300dp"
        android:layout_height="200dp"/>

</LinearLayout>

说明

显示Dialog原理是 onAttached(rootView); 即获取当前Activity的DectorView(FrameLayout或DectorView中的不带Toolbar的容器), 添加一个View就是显示Dialog,removeView就是取消Dialog

相关文章

  • DialogPlus原理

    DialogPlus 源码分析 简化后的代码如下 容器rootview.xml 内容布局contentview.x...

  • DialogPlus解析

    简介 早些时候用过这个控件,由于业务需要也追踪过部分源码 发现这并不是一个DialogFragment的衍生类,而...

  • JYDialog(DialogPlus)为什么显示的时候没有全屏

    目前在有的项目中显示对话框的Dialog是用的JYDialog来完成的,用法很简单,查看过部分源码,发现并不是系统...

  • 华与华方法(8)传播第一原理

    传播三大原理: 第一原理:刺激反射原理 第二原理:播传原理 第三原理:信号能量原理。 一、刺激反射原理 所有传播都...

  • 大数据相关

    hadoop原理 spark原理 kafka原理 数据仓库部分 Hadoop原理 MapReduce的原理默认根据...

  • js call apply instanceof 实现原理

    call原理 apply原理 instanceof原理

  • 《影响力》读后感

    全书主要围绕六大原理开展,分别是互惠原理,承诺和一致原理,社会认同原理,喜好原理,权威原理,以及稀缺原理。全文结构...

  • Today面试

    Runloop 底层原理Kvo 底层原理ARC 底层原理 如何实现GCD 底层原理Block 底层原理Aut...

  • iOS底层原理:weak的实现原理

    iOS底层原理:weak的实现原理iOS底层原理:weak的实现原理

  • 原理原理原理

    忙碌的一天,英语还有一个小题,明天完善,明天加油背诵英语对话 ,今天个人简历也有了大体框架,明天完善一下,加油。 ...

网友评论

      本文标题:DialogPlus原理

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