CodeFlys
2/12/2020 - 6:06 AM

BaseDialog

import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.support.annotation.StyleRes
import android.view.Gravity
import android.view.Window
import android.view.WindowManager

/**
 * @author TiT on 2019-09-09 09:09
 * dialog 基类
 */
abstract class BaseDialog constructor(
        context: Context,
        cancelable: Boolean = true,
        canceledOnTouchOutside: Boolean = true,
        @StyleRes themeResId: Int = R.style.BottomNoShadeDialog,
        @StyleRes animationsResId: Int = R.style.DialogBottomSlideInOutAnim,
        gravity: Int = Gravity.CENTER,
        width: Int = WindowManager.LayoutParams.WRAP_CONTENT,
        height: Int = WindowManager.LayoutParams.WRAP_CONTENT
) : Dialog(context, themeResId) {
    init {
        val window = this.window
        window!!.requestFeature(Window.FEATURE_NO_TITLE)
        setContentView(getLayoutId())
        window.setGravity(gravity)
        window.setBackgroundDrawableResource(android.R.color.transparent)
        val params = window.attributes
        params.width = width
        params.height = height
        window.attributes = params
        window.setWindowAnimations(animationsResId)
        setCancelable(cancelable)
        setCanceledOnTouchOutside(canceledOnTouchOutside)
    }

    abstract fun initView()
    abstract fun getLayoutId(): Int

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initView()
    }
}

///////////////////////////////////////////////////////////////////////////
//     
//  style
//
//    <!-- 不带有遮罩层的 Dialog 效果 -->
//    <style name="BottomNoShadeDialog">
//        <!--<item name="android:windowBackground">@android:color/transparent</item>-->
//        <!--<item name="android:windowFrame">@null</item>-->
//        <!--<item name="android:windowNoTitle">true</item>-->
//        <item name="android:windowIsFloating">true</item>
//        <!--<item name="android:windowIsTranslucent">true</item>-->
//        <!--<item name="android:windowContentOverlay">@null</item>-->
//        <!-- Dialog show、dismiss 的动画 -->
//        <!-- <item name="android:windowAnimationStyle">@style/DialogBottomSlideInOutAnim</item> -->
//        <!-- 设置是否显示遮罩层 -->
//        <item name="android:backgroundDimEnabled">false</item>
//    </style>
//
//    <!-- 带有遮罩层的Dialog效果 -->
//    <style name="BottomShadeDialog" parent="@style/BottomNoShadeDialog">
//        <!-- 设置是否显示遮罩层 -->
//        <item name="android:backgroundDimEnabled">true</item>
//        <!-- 设置遮罩层的灰度值 -->
//        <item name="android:backgroundDimAmount">0.5</item>
//    </style>
//
//    <!-- 底部滑入滑出 动画-->
//    <style name="DialogBottomSlideInOutAnim" mce_bogus="1" parent="android:Animation">
//        <item name="android:windowEnterAnimation">@anim/dialog_bottom_slide_in</item>
//        <item name="android:windowExitAnimation">@anim/dialog_bottom_slide_out</item>
//    </style>
//
//    <!-- 淡入淡出 动画 -->
//    <style name="DialogFadeInOutAnim" mce_bogus="1" parent="android:Animation">
//        <item name="android:windowEnterAnimation">@anim/fade_in</item>
//        <item name="android:windowExitAnimation">@anim/fade_out</item>
//    </style>
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
//
//  anim
//
//<set xmlns:android="http://schemas.android.com/apk/res/android">
//    <translate
//        android:duration="300"
//        android:fromYDelta="100%p"
//        android:toYDelta="0" />
//</set>
//
//<?xml version="1.0" encoding="utf-8"?>
//<set xmlns:android="http://schemas.android.com/apk/res/android">
//    <translate
//        android:duration="300"
//        android:fromYDelta="0"
//        android:toYDelta="100%p" />
//</set>
// 
//<?xml version="1.0" encoding="utf-8"?>
//<set xmlns:android="http://schemas.android.com/apk/res/android">
//    <alpha
//        android:duration="300"
//        android:fromAlpha="0.1"
//        android:interpolator="@android:anim/decelerate_interpolator"
//        android:toAlpha="1.0" />
//</set>
//
//<?xml version="1.0" encoding="utf-8"?>
//<set xmlns:android="http://schemas.android.com/apk/res/android">
//    <alpha
//        android:duration="300"
//        android:fromAlpha="1.0"
//        android:interpolator="@android:anim/decelerate_interpolator"
//        android:toAlpha="0.1" />
//</set>
///////////////////////////////////////////////////////////////////////////