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

    my_dialog.xml布局文件:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="
    http://schemas.android.com/apk/res/android
    "  
        android:orientation="vertical"   
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:minWidth="280dip"  
        android:background="#FFFFFFFF">  
           
        <TextView  
            android:id="@+id/dialog_title"  
            android:layout_width="fill_parent"  
            android:layout_height="40.0dip"  
            android:gravity="center_vertical"  
            android:paddingLeft="10.0dip"  
            android:text="@string/dialog_title"  
            android:textSize="20dip"  
            android:textStyle="bold"  
            android:textColor="#0087CB"/>  
           
        <ImageView  
            android:layout_height="wrap_content"  
            android:layout_width="fill_parent"  
            android:background="@drawable/dialog_sparator"/>  
           
        <LinearLayout   
            android:id="@+id/dialog_content"  
            android:orientation="vertical"  
            android:layout_height="wrap_content"  
            android:layout_width="fill_parent">  
            <TextView  
                android:id="@+id/dialog_message"  
                android:layout_width="fill_parent"  
                android:layout_height="50.0dip"  
                android:gravity="center_vertical"  
                android:paddingLeft="10dip"  
                android:text="@string/dialog_msg"  
                android:textSize="20dip"  
                android:textStyle="bold"  
                android:textColor="#707070"/>  
        </LinearLayout>  
           
        <LinearLayout  
            android:orientation="horizontal"  
            android:layout_width="fill_parent"  
            android:layout_height="50.0dip"  
            android:layout_alignParentTop="true"  
            android:gravity="center">  
            <Button  
                android:id="@+id/dialog_back"  
                android:layout_width="120dip"  
                android:layout_height="wrap_content"  
                android:layout_marginRight="5dip"  
                android:text="@string/dialog_back"  
                android:textSize="20dip"  
                android:textColor="#ffffff"  
                android:textStyle="bold"  
                android:background="@drawable/dlg_bckbtn_selector"/>  
            <Button  
                android:id="@+id/dialog_confirm"  
                android:layout_width="120dip"  
                android:layout_height="wrap_content"  
                android:layout_marginLeft="5dip"  
                android:text="@string/dialog_exit"  
                android:textSize="20dip"  
                android:textColor="#ffffff"  
                android:textStyle="bold"  
                android:background="@drawable/dlg_cfgrmbtn_selector"/>  
        </LinearLayout>  
                   
    </LinearLayout>

    定义Dialog的样式(主题):

    <?xml version="1.0" encoding="utf-8"?>  
    <resources>  
       
        <!-- 定义对话框样式 -->  
        <style name="Dialog" parent="android:style/Theme.Dialog">  
            <item name="android:windowBackground">@null</item>  
            <item name="android:windowNoTitle">true</item>  
            <item name="android:windowIsFloating">true</item>  
        </style>  
           
    </resources>

    自定义Dialog的Java代码:

    import android.app.Dialog;  
    import android.content.Context;  
    import android.content.DialogInterface;  
    import android.view.LayoutInflater;  
    import android.view.View;  
    import android.view.ViewGroup.LayoutParams;  
    import android.widget.Button;  
    import android.widget.LinearLayout;  
    import android.widget.TextView;  
        
       
    public class MyDialog extends Dialog {  
        
        public MyDialog(Context context, int theme) {  
            super(context, theme);  
        }  
        
        public MyDialog(Context context) {  
            super(context);  
        }  
        
        /** 
         * Helper class for creating a custom dialog 
         */  
        public static class Builder {  
            private Context context;  
            private String title; // 对话框标题  
            private String message; // 对话框内容  
            private String backButtonText; // 对话框返回按钮文本  
            private String confirmButtonText; // 对话框确定文本  
            private View contentView;  
        
            // 对话框按钮监听事件  
            private DialogInterface.OnClickListener   
                            backButtonClickListener,  
                            confirmButtonClickListener;  
        
            public Builder(Context context) {  
                this.context = context;  
            }  
        
            /** 
             * 使用字符串设置对话框消息 
             * @param title 
             * @return 
             */  
            public Builder setMessage(String message) {  
                this.message = message;  
                return this;  
            }  
        
            /** 
             * 使用资源设置对话框消息 
             * @param title 
             * @return 
             */  
            public Builder setMessage(int message) {  
                this.message = (String) context.getText(message);  
                return this;  
            }  
        
            /** 
             * 使用资源设置对话框标题信息 
             * @param title 
             * @return 
             */  
            public Builder setTitle(int title) {  
                this.title = (String) context.getText(title);  
                return this;  
            }  
        
            /** 
             * 使用字符串设置对话框标题信息 
             * @param title 
             * @return 
             */  
            public Builder setTitle(String title) {  
                this.title = title;  
                return this;  
            }  
        
            /** 
             * 设置自定义的对话框内容 
             * @param v 
             * @return 
             */  
            public Builder setContentView(View v) {  
                this.contentView = v;  
                return this;  
            }  
        
            /** 
             * 设置back按钮的事件和文本 
             * @param backButtonText 
             * @param listener 
             * @return 
             */  
            public Builder setBackButton(int backButtonText, DialogInterface.OnClickListener listener) {  
                this.backButtonText = (String)context.getText(backButtonText);  
                this.backButtonClickListener = listener;  
                return this;  
            }  
        
            /** 
             * 设置back按钮的事件和文本 
             * @param backButtonText 
             * @param listener 
             * @return 
             */  
            public Builder setBackButton(String backButtonText, DialogInterface.OnClickListener listener) {  
                this.backButtonText = backButtonText;  
                this.backButtonClickListener = listener;  
                return this;  
            }  
        
            /** 
             * 设置确定按钮事件和文本 
             * @param confirmButtonText 
             * @param listener 
             * @return 
             */  
            public Builder setConfirmButton(int confirmButtonText, DialogInterface.OnClickListener listener) {  
                this.confirmButtonText = (String)context.getText(confirmButtonText);  
                this.confirmButtonClickListener = listener;  
                return this;  
            }  
        
            /** 
             * 设置确定按钮事件和文本 
             * @param negativeButtonText 
             * @param listener 
             * @return 
             */  
            public Builder setConfirmButton(String confirmButtonText, DialogInterface.OnClickListener listener) {  
                 this.confirmButtonText = confirmButtonText;  
                 this.confirmButtonClickListener = listener;  
                 return this;  
            }  
        
            /** 
             * 创建自定义的对话框 
             */  
            public MyDialog create() {  
                LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
                   
                // 实例化自定义的对话框主题  
                final MyDialog dialog = new MyDialog(context, R.style.Dialog);  
                   
                View layout = inflater.inflate(R.layout.my_dialog, null);  
                dialog.addContentView(layout,   
                        new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
                   
                // 设置对话框标题  
                ((TextView) layout.findViewById(R.id.dialog_title)).setText(title);  
                   
                // 设置对话框内容  
                if (message != null) {  
                    TextView dlgMsg = (TextView)layout.findViewById(R.id.dialog_message);  
                    dlgMsg.setText(message);  
                } else if (contentView != null) {  
                    // if no message set  
                    // 如果没有设置对话框内容,添加contentView到对话框主体  
                    ((LinearLayout) layout.findViewById(R.id.dialog_content)).removeAllViews();  
                    ((LinearLayout) layout.findViewById(R.id.dialog_content)).addView(  
                        contentView, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));  
                }  
                   
                // 设置返回按钮事件和文本  
                if (backButtonText != null) {  
                    Button bckButton = ((Button) layout.findViewById(R.id.dialog_back));  
                    bckButton.setText(backButtonText);  
                       
                    if (backButtonClickListener != null) {  
                        bckButton.setOnClickListener(new View.OnClickListener() {  
                            public void onClick(View v) {  
                                backButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE);  
                            }  
                        });  
                    }  
                } else {  
                    layout.findViewById(R.id.dialog_back).setVisibility(View.GONE);  
                }  
                   
                // 设置确定按钮事件和文本  
                if (confirmButtonText != null) {  
                    Button cfmButton = ((Button) layout.findViewById(R.id.dialog_confirm));  
                    cfmButton.setText(confirmButtonText);  
                       
                    if (confirmButtonClickListener != null) {  
                        cfmButton.setOnClickListener(new View.OnClickListener() {  
                            public void onClick(View v) {  
                                confirmButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);  
                            }  
                        });  
                    }  
                } else {  
                    layout.findViewById(R.id.dialog_confirm).setVisibility(View.GONE);  
                }  
                   
                dialog.setContentView(layout);  
                   
                return dialog;  
            }  
        
        }  
        
    }

    MainActivity.java:

    package com.example.stuart.customdialog;
    
    import android.app.Activity;
    
    
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    
    import android.widget.Button;
    import android.widget.Toast;
    
    
    public class MainActivity extends Activity {
    
        private Mydialog mydialog;
        private Button btn;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btn =(Button)findViewById(R.id.button);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
    
                   Mydialog.Builder builder =new Mydialog.Builder(MainActivity.this);
                   builder.setTitle("提示");
                   builder.setMessage("你要删除吗?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                   builder.setConfirmButton("确定",new DialogInterface.OnClickListener() {
                       @Override
                       public void onClick(DialogInterface dialogInterface, int i) {
    
                       }
                   });
                   builder.setBackButton("返回",new DialogInterface.OnClickListener() {
                       @Override
                       public void onClick(DialogInterface dialogInterface, int i) {
                              mydialog.dismiss();
                       }
                   }) ;
                    mydialog=builder.create();
                    mydialog.show();
    
                }
    
            });
    
        }
    
    
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }

    ref:http://www.bug315.com/article/10.htm

    ref:http://www.cnblogs.com/eustoma/p/3937099.html

  • 相关阅读:
    DES加密
    隐写术-隐藏明文的另类办法
    古典加密方法(三)转轮机
    古典加密方法(二)置换技术
    古典加密方法(一)代换技术
    基于加密算法的攻击类型的通俗解释(转载自知乎)
    指针小结
    幸福是什么?
    Jmeter常用脚本开发之FTP请求
    python自动发邮件总结及实例说明
  • 原文地址:https://www.cnblogs.com/stuart/p/4574390.html
Copyright © 2011-2022 走看看