zoukankan      html  css  js  c++  java
  • Android 自定义dialog类

    首先定制style样式 styles.xml 加入自定义样式

    <style name="CustomLoadingDialog">
            <item name="android:windowFrame">@null</item><!--边框-->
            <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
            <item name="android:windowIsTranslucent">true</item><!--半透明-->
            <item name="android:windowNoTitle">true</item><!--无标题-->
            <item name="android:windowBackground">@color/transparent</item><!--背景透明-->
            <item name="android:background">@color/transparent</item>
            <item name="android:backgroundDimEnabled">true</item><!--模糊-->
            <item name="android:backgroundDimAmount">0.6</item>
        </style>

    在添加视图页面 在 res.layout 下加入loading_dialog.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:alpha="255"
        android:background="@drawable/bg_white_radius"
        android:gravity="center"
        android:orientation="vertical">
    
        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <TextView
            android:id="@+id/content_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:text="@string/loading_text"
            android:textColor="@color/bg_primary"
            android:textSize="14sp" />
    
    </LinearLayout>

    现在开始写自定义视图LoadingView

    class LoadingView(context: Context, content: String) :
        Dialog(context, R.style.CustomLoadingDialog) {
    
        init {
            setContentView(R.layout.loading_dialog)
            content_view.text = content
            setCanceledOnTouchOutside(true)
            backgroundAlpha(1f)
    
            val dm = context.resources.displayMetrics
            window?.attributes?.width = (dm.widthPixels * 0.6).toInt()
            window?.attributes?.height = (dm.widthPixels * 0.6 * 0.6).toInt()
            setCancelable(false)
        }
    
        override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
            when (keyCode) {
                KeyEvent.KEYCODE_BACK -> {
                    if (isShowing) {
                        dismiss()
                    }
                }
            }
            return super.onKeyDown(keyCode, event)
        }
    
        override fun dismiss() {
            if(isShowing){
                super.dismiss()
            }
        }
    
        override fun setTitle(title: CharSequence?) {
            content_view.text = title
        }
    
        private fun backgroundAlpha(alpha: Float) {
            window?.attributes?.alpha = alpha
        }
    
    }

     创建一个单例管理类,方便使用

    class LoadingManager private constructor(){
    
        private var mContext:Context? = null
        private var loadingView: LoadingView? = null
    
        companion object {
            val instance: LoadingManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
                LoadingManager()
            }
        }
    
        fun createDialog(context: Context, title: String): LoadingView {
            if(mContext == context){
                if(loadingView != null){
                    loadingView?.setTitle(title)
                    return loadingView!!
                }
            }
            loadingView = null
            mContext = context
            loadingView = LoadingView(mContext!!, title)
            return loadingView!!
        }
    
    }

    使用

    //显示加载中视图
    LoadingManager.instance.createDialog(this,"登录中").show()
    //关闭视图
    LoadingManager.instance.createDialog(this,"").dismiss()
  • 相关阅读:
    完整版excel上传导入读写批量数据并将反馈结果写入远程exel中
    将数据写入已有的excel文件
    微服务项目启动问题
    通过POI实现上传EXCEL的批量读取数据写入数据库
    [转] VLAN原理详解
    [转载]git tag — 标签相关操作
    [转载]SQLite3性能优化
    [转载]提升SQLite数据插入效率低、速度慢的方法
    [转载]sqlite3遇到database is locked问题的完美解决
    一个Linux下C线程池的实现(转)
  • 原文地址:https://www.cnblogs.com/rchao/p/11598079.html
Copyright © 2011-2022 走看看