关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »Android 自定义 AlertDialog 提示框

    Android 自定义 AlertDialog 提示框

    2015-05-02 00:00:00 出处:IT_xiao小巫
    分享

    在Android开发中,因项目需要,大部分情况下需要自定义Dialog来满足项目需求,系统虽然也有,但是界面美观方面,不忍直视。

    下面贴出Android项目中使用的自定义Dialog提示框代码,附:效果图。

    图一:

    图二:

    自定义AlertDialog的java类:

    /*******************************************************************************
     *
     * Copyright (c) Weaver Info Tech Co. Ltd
     *
     * Dialog
     *
     * app.ui.Dialog.java
     * TODO: File description or class description.
     * @since:  Jul 17, 2013
     * @version: 1.0.0
     *
     * @changeLogs:
     *     1.0.0: First created this class.
     *
     ******************************************************************************/
    package app.ui;
    
    import mobi.kuaidian.shizhenbao.R;
    import android.app.Dialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.graphics.drawable.Drawable;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class AlertDialog extends Dialog implements OnClickListener, OnItemClickListener {
    
        private TextView mTitleTextView;
        private TextView mMessageTextView;
    
        private Button mNegativeButton;
        private Button mNeutralButton;
        private Button mPositiveButton;
    
        private View mLeftLineView;
        private View mRightLineView;
    
        private ListView mListView;
        private ViewGroup mContent;
    
        private DialogInterface.OnClickListener mNegativeListener;
        private DialogInterface.OnClickListener mNeutraListener;
        private DialogInterface.OnClickListener mPositiveListener;
    
        private CharSequence[] mItems;
        private DialogInterface.OnClickListener mSingleChoiceClickListener;
        private DialogInterface.OnMultiChoiceClickListener mMultiChoiceClickListener;
        private int mCheckedItem;
        private boolean[] mCheckedItems;
        private boolean mIsMultiChoice = false;
        private boolean mIsSingleChoice = false;
    
        /**
         * @param context
         */
        public AlertDialog(Context context) {
            super(context, R.style.Theme_Dialog_Alert);
            setupViews();
        }
    
        /* (non-Javadoc)
         * @see android.view.View.OnClickListener#onClick(android.view.View)
         */
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button_positive:
                    if (mPositiveListener != null) {
                        mPositiveListener.onClick(this, 0);
                    } else {
                        cancel();
                    }
                    break;
    
                case R.id.button_negative:
                    if (mNegativeListener != null) {
                        mNegativeListener.onClick(this, 1);
                    } else {
                        cancel();
                    }
                    break;
    
                case R.id.button_nuetral:
                    if (mNeutraListener != null) {
                        mNeutraListener.onClick(this, 2);
                    } else {
                        cancel();
                    }
                    break;
    
                default:
                    break;
            }
        }
    
        /* (non-Javadoc)
         * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long)
         */
        @Override
        public void onItemClick(AdapterView< > parent, View view, int position,
                long id) {
            if (mIsSingleChoice && mSingleChoiceClickListener != null) {
                mSingleChoiceClickListener.onClick(this, position);
            } // else ignored
    
            if (mIsMultiChoice && mMultiChoiceClickListener != null) {
                // TODO
            } // else ignored
        }
    
        private void setupViews() {
            setContentView(R.layout.dialog);
    
            mTitleTextView = (TextView) findViewById(R.id.text_title);
            mMessageTextView = (TextView) findViewById(R.id.text_message);
    
            mNegativeButton = (Button) findViewById(R.id.button_negative);
            mNeutralButton = (Button) findViewById(R.id.button_nuetral);
            mPositiveButton = (Button) findViewById(R.id.button_positive);
    
            mLeftLineView = findViewById(R.id.view_line_left);
            mRightLineView = findViewById(R.id.view_line_right);
    
            mListView = (ListView) findViewById(R.id.list);
    
            mContent = (ViewGroup) findViewById(R.id.layout_content);
    
            mNegativeButton.setOnClickListener(this);
            mNeutralButton.setOnClickListener(this);
            mPositiveButton.setOnClickListener(this);
        }
    
        private void setTitle(String title) {
            mTitleTextView.setText(title);
        }
    
        private void setIcon(Drawable icon) {
            mTitleTextView.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null);
        }
    
        private void setMessage(CharSequence message) {
            mMessageTextView.setVisibility(View.VISIBLE);
            mMessageTextView.setText(message);
        }
    
        private void setView(View view) {
            if (view != null) {
                final LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,
                        LayoutParams.MATCH_PARENT);
                mContent.addView(view, layoutParams);
            }
        }
    
        private void setNegativeButton(CharSequence text, OnClickListener listener) {
            mNegativeButton.setVisibility(View.VISIBLE);
            mNegativeButton.setText(text);
            this.mNegativeListener = listener;
        }
    
        private void setNeutralButton(CharSequence text, OnClickListener listener) {
            mNeutralButton.setVisibility(View.VISIBLE);
            mNeutralButton.setText(text);
            this.mNeutraListener = listener;
        }
    
        private void setPositiveButton(CharSequence text, OnClickListener listener) {
            mPositiveButton.setVisibility(View.VISIBLE);
            mPositiveButton.setText(text);
            this.mPositiveListener = listener;
        }
    
        private void setButtonLines(boolean left, boolean right) {
            mLeftLineView.setVisibility(left   View.VISIBLE : View.GONE);
            mRightLineView.setVisibility(right   View.VISIBLE : View.GONE);
        }
    
        private void setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {
            mItems = items;
            mSingleChoiceClickListener = listener;
            mCheckedItem = checkedItem;
            mIsSingleChoice = true;
            if (items != null && items.length > 0) {
                mListView.setVisibility(View.VISIBLE);
                final DialogAdapter adapter = new DialogAdapter(getContext(), items);
                mListView.setAdapter(adapter);
                mListView.setOnItemClickListener(this);
                mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
                mListView.setSelection(mCheckedItem);
            }
        }
    
        private void setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,
                final OnMultiChoiceClickListener listener) {
            mItems = items;
            mMultiChoiceClickListener = listener;
            mCheckedItems = checkedItems;
            mIsMultiChoice = true;
        }
    
        public static class Builder {
    
            private AlertDialog mAlertDialog;
    
            private final Context mContext;
            private CharSequence mTitle;
            private Drawable mIconDrawable;
            private CharSequence mMessage;
    
            private CharSequence mNegative;
            private CharSequence mNeutral;
            private CharSequence mPositive;
    
            private DialogInterface.OnClickListener mNegativeListener;
            private DialogInterface.OnClickListener mNeutraListener;
            private DialogInterface.OnClickListener mPositiveListener;
    
            private View mView;
    
            private CharSequence[] mItems;
            private DialogInterface.OnClickListener mSingleChoiceClickListener;
            private DialogInterface.OnMultiChoiceClickListener mMultiChoiceClickListener;
            private int mCheckedItem;
            private boolean[] mCheckedItems;
            private boolean mIsMultiChoice = false;
            private boolean mIsSingleChoice = false;
    
            public Builder(Context context) {
                mContext = context;
            }
    
            public Builder setTitle(CharSequence title) {
                mTitle = title;
                return this;
            }
    
            public Builder setTitle(int titleId) {
                setTitle(mContext.getString(titleId));
                return this;
            }
    
            public Builder setMessage(CharSequence message) {
                mMessage = message;
                return this;
            }
    
            public Builder setMessage(int messageId) {
                setMessage(mContext.getString(messageId));
                return this;
            }
    
            public Builder setIcon(Drawable icon) {
                this.mIconDrawable = icon;
                return this;
            }
    
            public Builder setIcon(int iconId) {
                setIcon(mContext.getResources().getDrawable(iconId));
                return this;
            }
    
            public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {
                mItems = items;
                mSingleChoiceClickListener = listener;
                mCheckedItem = checkedItem;
                mIsSingleChoice = true;
                return this;
            }
    
            public void setView(View view) {
                mView = view;
            }
    
            public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,
                    final OnMultiChoiceClickListener listener) {
                mItems = items;
                mMultiChoiceClickListener = listener;
                mCheckedItems = checkedItems;
                mIsMultiChoice = true;
                return this;
            }
    
            public Builder setNegativeButton(CharSequence text, OnClickListener listener) {
                this.mNegative = text;
                this.mNegativeListener = listener;
                return this;
            }
    
            public Builder setNegativeButton(int textId, OnClickListener listener) {
                setNegativeButton(mContext.getString(textId), listener);
                return this;
            }
    
            public Builder setNeutralButton(CharSequence text, OnClickListener listener) {
                this.mNeutral = text;
                this.mNeutraListener = listener;
                return this;
            }
    
            public Builder setNeutralButton(int textId, OnClickListener listener) {
                setNeutralButton(mContext.getString(textId), listener);
                return this;
            }
    
            public Builder setPositiveButton(CharSequence text, OnClickListener listener) {
                this.mPositive = text;
                this.mPositiveListener = listener;
                return this;
            }
    
            public Builder setPositiveButton(int textId, OnClickListener listener) {
                setPositiveButton(mContext.getString(textId), listener);
                return this;
            }
    
            public AlertDialog create() {
                final AlertDialog alertDialog = new AlertDialog(mContext);
    
                if (mTitle != null) {
                    alertDialog.setTitle(mTitle.toString());
                } // else ignored
    
                if (mMessage != null) {
                    alertDialog.setMessage(mMessage);
                } // else ignored
    
                if (mIconDrawable != null) {
                    alertDialog.setIcon(mIconDrawable);
                } // else ignored
    
                if (mNegative != null) {
                    alertDialog.setNegativeButton(mNegative, mNegativeListener);
                } // else ignored
    
                if (mNeutral != null) {
                    alertDialog.setNeutralButton(mNeutral, mNeutraListener);
                } // else ignored
    
                if (mPositive != null) {
                    alertDialog.setPositiveButton(mPositive, mPositiveListener);
                } // else ignored
    
                // 按钮的分隔线
                if (mPositive != null && mNeutral != null && mNegative != null) {
                    alertDialog.setButtonLines(true, true);
                } else if (mPositive != null && mNeutral != null) {
                    alertDialog.setButtonLines(true, false);
                } else if (mNeutral != null && mNegative != null) {
                    alertDialog.setButtonLines(false, true);
                } else if (mPositive != null && mNegative != null) {
                    alertDialog.setButtonLines(true, false);
                } else {
                    alertDialog.setButtonLines(false, false);
                }
    
                if (mItems != null && mItems.length > 0) {
                    if (mIsSingleChoice) {
                        alertDialog.setSingleChoiceItems(mItems, mCheckedItem, mSingleChoiceClickListener);
                    } // else ignored
    
                    if (mIsMultiChoice) {
                        alertDialog.setMultiChoiceItems(mItems, mCheckedItems, mMultiChoiceClickListener);
                    } // else ignored
                }  // else ignored
    
                if (mView != null) {
                    alertDialog.setView(mView);
                }
    
                mAlertDialog = alertDialog;
                return alertDialog;
            }
    
            public AlertDialog show() {
                create();
                mAlertDialog.show();
                return mAlertDialog;
            }
        }
    
        public static class DialogAdapter extends ArrayAdapter<CharSequence> {
    
            /**
             * @param context
             * @param resource
             */
            public DialogAdapter(Context context, CharSequence[] items) {
                super(context, R.layout.list_item_dialog, R.id.text, items);
            }
        }
    }

    必要的两个xml文件,这个是dialog.xml文件:

    < xml version="1.0" encoding="utf-8" >
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="@dimen/dialog_width"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/text_title"
            android:layout_width="match_parent"
            android:layout_height="@dimen/header_height"
            android:background="@color/main_color"
            android:gravity="center"
            android:textColor="#ffffff"
            android:textSize="20sp" />
    
        <FrameLayout
            android:id="@+id/layout_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <TextView
                android:id="@+id/text_message"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="8dp"
                android:textColor="@color/main_text_color"
                android:textSize="18sp"
                android:visibility="gone" />
    
            <ListView
                android:id="@+id/list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:cacheColorHint="@color/transparent"
                android:divider="@drawable/point"
                android:listSelector="@drawable/list_selector"
                android:visibility="gone" />
        </FrameLayout>
    
        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:background="#adadad" />
    
        <LinearLayout
            android:id="@+id/layout_footer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <Button
                android:id="@+id/button_positive"
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:layout_weight="1.0"
                android:background="@drawable/button_common_selector"
                android:visibility="gone" />
    
            <View
                android:id="@+id/view_line_left"
                android:layout_width="1px"
                android:layout_height="match_parent"
                android:background="#adadad"
                android:visibility="visible" />
    
            <Button
                android:id="@+id/button_nuetral"
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:layout_weight="1.0"
                android:background="@drawable/button_common_selector"
                android:visibility="gone" />
    
            <View
                android:id="@+id/view_line_right"
                android:layout_width="1px"
                android:layout_height="match_parent"
                android:background="#adadad"
                android:visibility="visible" />
    
            <Button
                android:id="@+id/button_negative"
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:layout_weight="1.0"
                android:background="@drawable/button_common_selector"
                android:visibility="gone" />
        </LinearLayout>
    
    </LinearLayout>

    这个是list_item_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="wrap_content">
    
        <CheckedTextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="@dimen/row_height"
            android:checkMark="@drawable/ic_check_selector"
            android:duplicateParentState="true"
            android:gravity="center_vertical"
            android:padding="12dp"
            android:textColor="@color/gray"
            android:textSize="18dp" />
    
    </LinearLayout>

    资源文件中的样式属性,这里就不多说了,可以自己设置随意的颜色和样式,或者加上图片。

    使用方法(图1):

    final AlertDialog.Builder builder  = new AlertDialog.Builder(getActivity());
                    builder.setTitle("选择头像来源");
                    final String[] avatarSources = getResources().getStringArray(R.array.avatar_sources);
                    builder.setSingleChoiceItems(avatarSources, 0, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            switch (which) {
    
                                case 0:
                                    //点击第一个条目
                                    break;
                                case 1:
    								//点击第2个条目
                                    break;
                                case 2:
    								//点击第3个条目
                                    break;
    
                                default:
                                    break;
                            }
                            dialog.dismiss();
                        }
                    });
                    builder.show();

    使用方法(图2):

     final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle("提示");
                    builder.setMessage("您确定要退出登录么?");
                    builder.setNegativeButton("取消", null);
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //退出需要执行的操作
                        }
                    });
                    builder.show();

    以上就是Android中自定义 AlertDialog 提示框的实现方法,希望对你有所帮助。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。