IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android 让你爱上写dialog -> 正文阅读

[移动开发]android 让你爱上写dialog

感觉每次写dialog都很痛苦,虽然能写出来,但每次都要新建一个dialog类,

写里面的布局,

写里面的逻辑,

总感觉很麻烦。

方案核心就是让你只关注布局和以及各种界面上的操作,

dialog本身不处理任何view和数据

更多关于dialog的设置,可以自行扩展

Java和Kotlin版本功能一样

Java版本:

?使用:

    EasyDialog dialog;
    private void useDialog() {
        dialog = new EasyDialog(this , R.layout.album_list_item) {
            @Override
            public void convert(EasyDialog.DialogHolder holder) {
                holder.setText(R.id.check_view , "xxxx");
                holder.setOnClickListener(R.id.check_view, v -> dialog.dismiss());
            }
        };
        dialog.show();
    }

Dialog:

public abstract class EasyDialog extends Dialog {

    View layout;
    int layoutId;
    Context mContext;

    public EasyDialog(@NonNull Context context, int mLayoutId) {
        super(context, R.style.EasyDialog);
        mContext = context;
        layoutId = mLayoutId;
        initView();
    }

    protected void initView(){
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layout = inflater.inflate(layoutId , null);
        addContentView(layout , new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        DialogHolder holder = new DialogHolder(mContext , layout);
        convert(holder);
    }
    public abstract void convert(DialogHolder holder);

    public class DialogHolder{
        Context context1 ;
        View view1;
        DialogHolder(Context context , View view){
            context1 = context;
            view1 = view;
        }

        public <T extends View> T getView(int viewId) {
               View view = view1.findViewById(viewId);
            return (T) view;
        }

        public DialogHolder setText(int viewId, String text) {
            TextView tv = getView(viewId);
            tv.setText(text);
            return this;
        }

        public DialogHolder setVisiable(int viewId, boolean visiable) {
            View view = getView(viewId);
            if(visiable){
                view.setVisibility(View.VISIBLE);
            }else {
                view.setVisibility(View.GONE);
            }
            return this;
        }

        public DialogHolder setImageResource(int viewId, int resId) {
            ImageView view = getView(viewId);
            view.setImageResource(resId);
            return this;
        }

        public DialogHolder setImageUrl(int viewId, String url) {
            ImageView view = getView(viewId);
            Glide.with(mContext).load(url).into(view);
            return this;
        }

        public DialogHolder setOnClickListener(int viewId, View.OnClickListener listener) {
            View view = getView(viewId);
            view.setOnClickListener(listener);
            return this;
        }

        public DialogHolder setTextCorlor(int viewId, int colorId) {
            TextView view = getView(viewId);
            view.setTextColor(ContextCompat.getColor(mContext,colorId));
            return this;
        }

        public DialogHolder setBackgroundCorlor(int viewId, int colorId) {
            View view = getView(viewId);
            view.setBackgroundColor(ContextCompat.getColor(mContext,colorId));
            return this;
        }

        public DialogHolder setAlpha(float alpha) {
            view1.setAlpha(alpha);
            return this;
        }

    }
}

KT版

abstract class EasyDialog : Dialog {
    var layout: View? = null
    var layoutId: Int = 0
    var mContext: Context


    constructor(mContext: Context, mLayoutId: Int) : super(mContext, R.style.EasyDialog) {
        this.mContext = mContext;
        this.layoutId = mLayoutId;
        initView();
    }

    private fun initView() {
        val infalater: LayoutInflater = mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        layout = infalater.inflate(layoutId , null);
        this.addContentView(layout , ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
        val holder = DialogHolder(context , layout);
        convert(holder);
    }


    abstract fun convert(holder: DialogHolder)

    class DialogHolder(context: Context , view:View?){
        var mContext: Context? = context
        var view: View? = view

        fun <T : View?> getView(viewId: Int): T {
            var view: View? = view?.findViewById(viewId)?:null
            return view as T
        }

        fun setText(viewId: Int , text:String) : DialogHolder{
            var tv  = getView<TextView>(viewId)
            tv.text = text?:""
            return this
        }

        fun setTextCorlor(viewId: Int, colorId: Int): DialogHolder? {
            val view = getView<TextView>(viewId)
            view.setTextColor(ContextCompat.getColor(mContext!!, colorId))
            return this
        }


        fun setVisiable(viewId: Int , mVisiable:Boolean) : DialogHolder{
            val view = getView<View>(viewId)
            if (mVisiable) {
                view.visibility = View.VISIBLE
            } else {
                view.visibility = View.GONE
            }
            return this
        }

        fun setImageUrl(viewId: Int , url :String):DialogHolder{
            val iv  = getView<ImageView>(viewId)
            Glide.with(mContext!!).load(url).into(iv)
            return this;
        }

        fun setImageResource(viewId: Int , resId :Int):DialogHolder{
            val iv  = getView<ImageView>(viewId)
            Glide.with(mContext!!).load(resId).into(iv)
            return this;
        }

        fun setOnClickListener(viewId: Int , listener:View.OnClickListener):DialogHolder{
            val view = getView<View>(viewId)
            view.setOnClickListener(listener)
            return this
        }

        fun setBackgroundCorlor(viewId: Int, colorId: Int): DialogHolder? {
            val view = getView<View>(viewId)
            view.setBackgroundColor(ContextCompat.getColor(mContext!!, colorId))
            return this
        }

        fun setAlpha(alpha: Float): DialogHolder? {
            view?.alpha = alpha
            return this
        }
    }

}

使用:

    var commonDialog : EasyDialog? = null
    private fun initDialog() {
        var show = true;
        if(show){
            commonDialog = object :EasyDialog(this , R.layout.agree_dialog){
                override fun convert(holder: DialogHolder) {
                    holder.setOnClickListener(R.id.negtive , View.OnClickListener {
                        Toast.makeText(this@MainActivity , "点击了取消" , Toast.LENGTH_SHORT).show()
                        AppUtils.exitApp()
                    })
                    holder.setOnClickListener(R.id.positive , View.OnClickListener {
                        Toast.makeText(this@MainActivity , "点击了确定" , Toast.LENGTH_SHORT).show()
                        commonDialog?.dismiss()
                        requestSomePerMissions()
                    })
                }
            }
            commonDialog?.show();
        }
    }

style:

    <style name="EasyDialog" parent="android:style/Theme.Dialog">
        <!--背景颜色及和透明程度-->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--是否去除标题 -->
        <item name="android:windowNoTitle">true</item>
        <!--是否去除边框-->
        <item name="android:windowFrame">@null</item>
        <!--是否浮现在activity之上-->
        <item name="android:windowIsFloating">true</item>
        <!--是否模糊-->
        <item name="android:backgroundDimEnabled">true</item>
    </style>

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:55:57  更:2021-12-08 13:58:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:30:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码