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

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/stuart/p/4574390.html
Copyright © 2011-2022 走看看