zoukankan      html  css  js  c++  java
  • 安卓自定义Dialog的实现

    一、Dialog布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:orientation="vertical"
        android:padding="20.0dip" >
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="#ff7200"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/title"
                android:textColor="#ffffff"
                android:textSize="20sp"
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:gravity="center"
                android:text="自定义弹窗"
                android:visibility="visible" />
    
            <LinearLayout
                android:id="@+id/content"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center" >
    
    
                <TextView
                    android:background="#ffffff"
                    android:id="@+id/message"
                    android:textColor="#b8b8b8"
                    android:textSize="16sp"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:gravity="left|center"
                    android:lineSpacingMultiplier="1.5"
                    android:paddingBottom="15.0dip"
                    android:paddingLeft="20.0dip"
                    android:paddingRight="20.0dip"
                    android:paddingTop="15.0dip" />
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:layout_gravity="bottom"
                android:background="#ffffff"
                android:gravity="center"
                android:orientation="horizontal" >
    
                <TextView
                    android:layout_weight="1"
                    android:id="@+id/positiveTextView"
                    android:textColor="#b8b8b8"
                    android:textSize="16sp"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center"
                    android:text="ok"
                    android:clickable="true"/>
    
                <TextView
                    android:layout_weight="1"
                    android:id="@+id/negativeTextView"
                    android:textColor="#ff9138"
                    android:textSize="16sp"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center"
                    android:text="cancel"
                    android:clickable="true"/>
            </LinearLayout>
        </LinearLayout>
    
    </FrameLayout>
    
    

    二、Style

     <style name="Dialog" parent="android:style/Theme.Dialog">
            <item name="android:background">#00000000</item>
            <item name="android:windowBackground">@android:color/transparent</item>
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowIsFloating">true</item>
        </style>
    
    

    三、MainActivity代码

     CustomDialog.Builder builder = new CustomDialog.Builder(MainActivity.this);
                    builder.setMessage("这个就是自定义的提示框");
                    builder.setTitle("提示");
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            //设置你的操作事项
                            Toast.makeText(MainActivity.this,"queding",Toast.LENGTH_SHORT).show();
                        }
                    });
    
                    builder.setNegativeButton("取消",
                            new android.content.DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    Toast.makeText(MainActivity.this,"queding",Toast.LENGTH_SHORT).show();
                                    dialog.dismiss();
                                }
                            });
    
                    builder.create().show();
    
    

    四、自定义DialogClass

    package com.cavytech.widget;
    
    import android.app.Dialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.cavytech.wear2.R;
    
    /**
     * Created by LiBin on 2016/6/16.
     */
    public class CustomDialog extends Dialog {
    
        public CustomDialog(Context context) {
            super(context);
        }
    
        public CustomDialog(Context context, int theme) {
            super(context, theme);
        }
    
        public static class Builder {
            private Context context;
            private String title;
            private String message;
            private String positiveButtonText;
            private String negativeButtonText;
            private View contentView;
            private DialogInterface.OnClickListener positiveButtonClickListener;
            private DialogInterface.OnClickListener negativeButtonClickListener;
    
            public Builder(Context context) {
                this.context = context;
            }
    
            public Builder setMessage(String message) {
                this.message = message;
                return this;
            }
    
            /**
             * Set the Dialog message from resource
             *
             * @param
             * @return
             */
            public Builder setMessage(int message) {
                this.message = (String) context.getText(message);
                return this;
            }
    
            /**
             * Set the Dialog title from resource
             *
             * @param title
             * @return
             */
            public Builder setTitle(int title) {
                this.title = (String) context.getText(title);
                return this;
            }
    
            /**
             * Set the Dialog title from String
             *
             * @param title
             * @return
             */
    
            public Builder setTitle(String title) {
                this.title = title;
                return this;
            }
    
            public Builder setContentView(View v) {
                this.contentView = v;
                return this;
            }
    
            /**
             * Set the positive button resource and it's listener
             *
             * @param positiveButtonText
             * @return
             */
            public Builder setPositiveButton(int positiveButtonText,
                                             DialogInterface.OnClickListener listener) {
                this.positiveButtonText = (String) context
                        .getText(positiveButtonText);
                this.positiveButtonClickListener = listener;
                return this;
            }
    
            public Builder setPositiveButton(String positiveButtonText,
                                             DialogInterface.OnClickListener listener) {
                this.positiveButtonText = positiveButtonText;
                this.positiveButtonClickListener = listener;
                return this;
            }
    
            public Builder setNegativeButton(int negativeButtonText,
                                             DialogInterface.OnClickListener listener) {
                this.negativeButtonText = (String) context
                        .getText(negativeButtonText);
                this.negativeButtonClickListener = listener;
                return this;
            }
    
            public Builder setNegativeButton(String negativeButtonText,
                                             DialogInterface.OnClickListener listener) {
                this.negativeButtonText = negativeButtonText;
                this.negativeButtonClickListener = listener;
                return this;
            }
    
            public CustomDialog create() {
                LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                // instantiate the dialog with the custom Theme
                final CustomDialog dialog = new CustomDialog(context, R.style.Dialog);
                View layout = inflater.inflate(R.layout.dialog_normal_layout, null);
                dialog.addContentView(layout, new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
                // set the dialog title
                ((TextView) layout.findViewById(R.id.title)).setText(title);
                // set the confirm button
                if (positiveButtonText != null) {
                    ((TextView) layout.findViewById(R.id.positiveTextView))
                            .setText(positiveButtonText);
                    if (positiveButtonClickListener != null) {
                        ((TextView) layout.findViewById(R.id.positiveTextView))
                                .setOnClickListener(new View.OnClickListener() {
                                    public void onClick(View v) {
                                        positiveButtonClickListener.onClick(dialog,
                                                DialogInterface.BUTTON_POSITIVE);
                                    }
                                });
                    }
                } else {
                    // if no confirm button just set the visibility to GONE
                    layout.findViewById(R.id.positiveTextView).setVisibility(
                            View.GONE);
                }
                // set the cancel button
                if (negativeButtonText != null) {
                    ((TextView) layout.findViewById(R.id.negativeTextView))
                            .setText(negativeButtonText);
                    if (negativeButtonClickListener != null) {
                        ((TextView) layout.findViewById(R.id.negativeTextView))
                                .setOnClickListener(new View.OnClickListener() {
                                    public void onClick(View v) {
                                        negativeButtonClickListener.onClick(dialog,
                                                DialogInterface.BUTTON_NEGATIVE);
                                    }
                                });
                    }
                } else {
                    // if no confirm button just set the visibility to GONE
                    layout.findViewById(R.id.negativeTextView).setVisibility(
                            View.GONE);
                }
                // set the content message
                if (message != null) {
                    ((TextView) layout.findViewById(R.id.message)).setText(message);
                } else if (contentView != null) {
                    // if no message set
                    // add the contentView to the dialog body
                    ((LinearLayout) layout.findViewById(R.id.content))
                            .removeAllViews();
                    ((LinearLayout) layout.findViewById(R.id.content))
                            .addView(contentView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
                }
                dialog.setContentView(layout);
                return dialog;
            }
        }
    }
    
  • 相关阅读:
    敏捷开发(五)- 框架SCRUM内容
    敏捷开发(四)- 故事验收测试
    敏捷开发(三)- 估算故事
    敏捷开发(二)- 编写故事
    敏捷开发(一)- 搜集故事
    项目管理(十)- 开发准备列表
    项目管理(九)- 组织项目资源
    web 前端常用组件【04】Datetimepicker 和 Lodop
    让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】
    Word 打包 zip 并提供下载
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/14619438.html
Copyright © 2011-2022 走看看