博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android的一个自定义的动态添加Dialog类
阅读量:5334 次
发布时间:2019-06-15

本文共 10466 字,大约阅读时间需要 34 分钟。

android里面会有自己内置的Dialog的提示框,也算是比较方便的了,但是为了省点时间,我们在项目里面添加了一个自己的Dialog类,这个类实现了能够动态的添加按钮和一些提示语句或者其他的显示效果。

import android.app.Activity;import android.app.Dialog;import android.app.DialogFragment;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.FrameLayout;import android.widget.LinearLayout;import android.widget.TextView;public class DialogUnifiedFragment extends DialogFragment {    private View mTitleView; // 标题栏的布局    private View mCloseButton; // 标题栏右上角的关闭按钮    private View mContextView; // 对话框内容的布局    private View mNullButton; // 无按钮对应的View    private View mFristButton; // 第一个按钮对应的View    private View mSecondButton; // 第二个按钮对用的View    private LinearLayout mButtonViewNull; // 无按钮的布局    private LinearLayout mButtonViewFrist; // 第一个按钮的布局    private LinearLayout mButtonView; // Button的布局    private TextView mTextview_content; // 显示对话框内容的TextView    private Context mContext;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setStyle(R.style.dialog, R.style.dialog);        setCancelable(false);    }    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        return super.onCreateDialog(savedInstanceState);    }    @Override    public void onViewCreated(View view, Bundle savedInstanceState) {        super.onViewCreated(view, savedInstanceState);    }    public void addContext(Context mContext) {        this.mContext = mContext;    }    /**     * @see android.app.DialogFragment#onAttach(android.app.Activity)     */    @Override    public void onAttach(Activity activity) {        // TODO Auto-generated method stub        super.onAttach(activity);        mContext = activity;    }    /**     * 将对应的“标题”,“内容”,“底部Button”放到Dialog默认布局里     */    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        super.onCreateView(inflater, container, savedInstanceState);        View view = inflater.inflate(R.layout.fragment_common_dialog_layout, container);        if (null != mTitleView) {            FrameLayout titleView = (FrameLayout) view.findViewById(R.id.layout_title);            titleView.addView(mTitleView);            if (null != mCloseButton) {                titleView.addView(mCloseButton);            }        }        if (null != mContextView) {            LinearLayout contentView = (LinearLayout) view.findViewById(R.id.layout_content);            contentView.addView(mContextView);        }        mButtonViewNull = (LinearLayout) view.findViewById(R.id.layout_button_null);        mButtonViewFrist = (LinearLayout) view.findViewById(R.id.layout_button_frist);        mButtonView = (LinearLayout) view.findViewById(R.id.layout_button);        if (null != mNullButton) {            mButtonViewNull.setVisibility(View.VISIBLE);        }        if (null != mFristButton) {            mButtonView.setVisibility(View.VISIBLE);            mButtonViewFrist.addView(mFristButton);            mButtonViewFrist.setVisibility(View.VISIBLE);        }        LinearLayout buttonViewSecond = (LinearLayout) view.findViewById(R.id.layout_button_second);        if (null != mSecondButton) {            mButtonView.setVisibility(View.VISIBLE);            buttonViewSecond.addView(mSecondButton);            buttonViewSecond.setVisibility(View.VISIBLE);        }        if (null != mSecondButton || null != mFristButton) {        }        return view;    }    private int height = 0, width = 0;    public void setDialogSize(int height, int width) {        this.height = height;        this.width = width;    }    @Override    public void onResume() {        super.onResume();        // 用于重新设置dialog的大小        if (width != 0 && height != 0) {            getDialog().getWindow().setLayout(width, height);        }    }    /**     * 添加标题栏,保存之后返回当前DialogFragment     *      * @param title     *            对话框标题内容     * @return DialogFragment     */    public DialogUnifiedFragment addTitle(String title) {        mTitleView = LayoutInflater.from(mContext).inflate(R.layout.fragment_dialog_title, null);        TextView title_name = (TextView) mTitleView.findViewById(R.id.dialog_common_tv_title);        title_name.setText(title);        return this;    }    @Override    public void setStyle(int style, int theme) {        // TODO Auto-generated method stub        super.setStyle(style, theme);    }    /**     * 添加标题栏标题栏右侧的 关闭按钮     *      * @param onClickListener     * @return     */    public DialogUnifiedFragment addClose(final OnClickListener onClickListener) {        mCloseButton = LayoutInflater.from(mContext).inflate(R.layout.fragment_dialog_title_close, null);        Button close = (Button) mCloseButton.findViewById(R.id.dialog_factory_bt_cancle);        if (null != onClickListener)            close.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    dismissAllowingStateLoss();                    if (onClickListener != null) {                        onClickListener.onClick(v);                    }                }            });        return this;    }    /**     * 添加对话框的内容,保存之后返回当前DialogUnifiedFragment     *      * @param content     *            内容     * @return DialogUnifiedFragment     */    public DialogUnifiedFragment addContent(String content) {        mContextView = LayoutInflater.from(mContext).inflate(R.layout.fragment_dialog_content, null);        mTextview_content = (TextView) mContextView.findViewById(R.id.dialog_common_tv_content);        mTextview_content.setText(content);        return this;    }    /**     * 添加对话框ContentView,限制条件如下: 1.仅允许传用于显示的、无点击事件的、无业务逻辑处理的View     * 2.view的格式与R.layout.dialog_content一致 3.使用该方法的Dialog必须有Title     * 4.禁止同时调用addContent(String content)     *      * @param view     * @return     */    public DialogUnifiedFragment addView(View view) {        if (view != null) {            mContextView = view;        }        return this;    }    /**     * 默认内容的TextView的文字“居中” 对升级等对话框,需要显示的文字太多,重新设置文字对齐方式     */    public void setTextGravity(int gravityType) {        mTextview_content.setGravity(gravityType);    }        public void setTextSize(int textSize){        mTextview_content.setTextSize(textSize);    }    /**     * 一个一个的添加Button     *      * @param whichButton     *            添加的具体是哪个Button     * @param buttonName     *            Button要显示的内容     * @param BtnClickListener     * @return DialogUnifiedFragment     */    public DialogUnifiedFragment addButton(int whichButton, String buttonName, final OnClickListener onClickListener ,final boolean canDismiss) {        switch (whichButton) {        case 0:            mNullButton = LayoutInflater.from(mContext).inflate(R.layout.fragment_dialog_null_button, null);            break;        case 1:            mFristButton = LayoutInflater.from(mContext).inflate(R.layout.fragment_dialog_frist_button, null);            Button frist_button = (Button) mFristButton.findViewById(R.id.dialog_common_bt_frist);            frist_button.setText(buttonName);            frist_button.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    if(canDismiss){                        dismissAllowingStateLoss();                    }                    if (onClickListener != null) {                        onClickListener.onClick(v);                    }                }            });            mSecondButton = null;            break;        case 2:            mSecondButton = LayoutInflater.from(mContext).inflate(R.layout.fragment_dialog_second_button, null);            Button second_button = (Button) mSecondButton.findViewById(R.id.dialog_common_bt_second);            second_button.setText(buttonName);            second_button.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    if(canDismiss){                        dismissAllowingStateLoss();                    }                    if (onClickListener != null) {                        onClickListener.onClick(v);                    }                }            });            break;        }        return this;    }}

这个类的使用也是比较简单的。我们只要在自己的Activity里面创建并引用改类就可以调用其中的方法了

private DialogUnifiedFragment dialog;dialog=new DialogUnifiedFragment();dialog.addContext(getBaseContext()); dialog.setDialogSize(300,300);//设置弹出框的大小 dialog.addTitle("这是一个弹出框!")//设置弹出框的标题 dialog.addClose();//在右上角添加关闭的按钮 dialog.setTextSize(20);//设置弹出框主体文字的大小

首先我们创建一个比较简单的弹出框,就是在弹出框上面添加文字和一个按钮。

dialog.addContent("这是我的弹出框").addButton(1, "确定", new OnClickListener() {                            @Override                            public void onClick(View v) {//可以在这里添加点击确定按钮的操作。                                   }                        }, true);                        dialog.show(getFragmentManager(), "dwonloadContract");//在这里将弹出框show出来

其次我们可以动态的添加两个按钮;

dialog.addContent("这是两个按钮的弹出框").addButton(1, "取消", new OnClickListener() {                    @Override                    public void onClick(View v) {                    }                }, true).addButton(2, "确定", new OnClickListener() {                    @Override                    public void onClick(View v) {                                            }                }, true);                dialog.show(getFragmentManager(), "hey ,there !");

好了更加自由的功能就是下面这个了,我们可以定义一个view来显示我们想要的效果,然后将改页面加载到我们自定义的dialog上面来。

View uploadSucceed = LayoutInflater.from(context).inflate(R.layout.view_myview, null);                                    dialog.addView(uploadSucceed).addButton(1,                                            "关闭", new OnClickListener() {                                                @Override                                                public void onClick(View v) {                                            }, true);                                    dialog.setDialogSize(400, 600);                                    dialog.show(getFragmentManager(), "");

当然我不得不说,当你在这个弹出框里面使用了addView的话那么你是不能使用addContent了的,同样如果使用了addContent你就不能用addView了。就酱。

从上面的代码我们看到,这个自定义的类也是继承了原生API里面的DialogFragment .我们可以通过该类的setDialogSize()方法来设置提示框的大小,通过addView去添加我们自己的View,通过addContent去添加弹出框的提示语句,通过addButton去添加按钮。

转载于:https://www.cnblogs.com/BobAdmin/p/4984783.html

你可能感兴趣的文章
msp430入门编程03
查看>>
mysql主从读写分离,分库分表
查看>>
python基本数据类型
查看>>
JAVA web 中文传参乱码解决方案:(最简洁方案)
查看>>
iOS 下载功能(断点续传)
查看>>
hdu1403 Longest Common Substring
查看>>
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
Redis数据库No-SQL的介绍安装和使用
查看>>
Graphics绘图闪烁的问题
查看>>
移动Web开发之- 移动化用户体验设计
查看>>
关于TDD的思考
查看>>
Cocos2d-x学习之windows 7 android环境搭建
查看>>
python帮助文档查看
查看>>
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
子父类不同属性代码执行顺序
查看>>
dbcp 1.4 底层连接断开时内存泄露bug
查看>>
关于密码
查看>>
ASP.NET 导出PPT
查看>>