zoukankan      html  css  js  c++  java
  • 分享一个圆角自定义的漂亮AlertDialog

    esdrawable-hdpig_title_custom_dialog.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item><shape>
                <gradient android:angle="270" android:endColor="#e1e1e1" android:startColor="#e1e1e1" />
                <corners android:topLeftRadius="15dp" android:topRightRadius="15dp" />
        </shape></item>
    </selector>

    esdrawable-hdpig_middle_custom_dialog.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item><shape>
                <gradient android:angle="270" android:endColor="#f5f5f5" android:startColor="#f5f5f5" />
        </shape></item>
    </selector>

    esdrawable-hdpig_bottom_custom_dialog.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item><shape>
                <gradient android:angle="270" android:endColor="#e1e1e1" android:startColor="#e1e1e1" />
                <corners android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp" />
        </shape></item>
    </selector>

    esdrawable-hdpibuton_info_rounded.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_pressed="true"><shape>
                <solid android:color="@color/bbutton_info_pressed" />
                <stroke android:width="1dp" android:color="@color/bbutton_info_edge" />
                <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
            </shape></item>
                
        <item android:state_enabled="false"><shape>
            <solid android:color="@color/bbutton_info_disabled" />
                <stroke android:width="1dp" android:color="@color/bbutton_info_disabled_edge" />
                <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
            </shape></item>
            
        
        <item><shape>
                <solid android:color="@color/bbutton_info" />
                <stroke android:width="1dp" android:color="@color/bbutton_info_edge" />
                <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
            </shape></item>
    
    </selector>

    esdrawable-hdpibuton_danger_rounded.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_pressed="true"><shape>
                <solid android:color="@color/bbutton_danger_pressed" />
                <stroke android:width="1dp" android:color="@color/bbutton_danger_edge" />
                <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
            </shape></item>
            
        
        <item android:state_enabled="false"><shape>
            <solid android:color="@color/bbutton_danger_disabled" />
                <stroke android:width="1dp" android:color="@color/bbutton_danger_disabled_edge" />
                <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
            </shape></item>
            
    
        <item><shape>
                <solid android:color="@color/bbutton_danger" />
                <stroke android:width="1dp" android:color="@color/bbutton_danger_edge" />
                <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
            </shape></item>
        
            
    </selector>

    eslayoutcustom_dialog_layout.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minWidth="280dip"
        android:orientation="vertical"
        android:background="@null">
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bg_title_custom_dialog"
            android:paddingTop="10dip"
            android:paddingBottom="10dip"
            android:orientation="horizontal" >
            <ImageView 
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="10dip"
                android:src="@drawable/ic_expand"
                android:contentDescription="@string/line"/>
            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="8dip"
                android:textSize="16sp"
                />
        </LinearLayout>
    
        <LinearLayout
            android:id="@+id/content"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:minHeight="100dip"
            android:background="@drawable/bg_middle_custom_dialog"
            android:orientation="vertical" 
            android:gravity="center">
    
            <TextView
                android:id="@+id/message"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip" 
                android:textSize="16sp"
                android:textColor="#FF000000"/>
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingTop="5dip"
            android:paddingBottom="5dip"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:background="@drawable/bg_bottom_custom_dialog"
            android:orientation="horizontal" >
    
            <Button
                android:id="@+id/positiveButton"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:background="@drawable/bbuton_info_rounded"
                android:textColor="@color/bg_white"
                android:layout_weight="1"
                android:singleLine="true" />
    
            <Button
                android:id="@+id/negativeButton"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:background="@drawable/bbuton_danger_rounded"
                android:layout_marginLeft="3dip"
                android:textColor="@color/bg_white"
                android:layout_weight="1"
                android:singleLine="true" />
        </LinearLayout>
    
    </LinearLayout>

    eslayoutactivity_main.xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginLeft="22dp"
            android:layout_marginTop="18dp"
            android:text="Button" />
    
    </RelativeLayout>

    CustomDialog.java:

    package com.example.test;
     
    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;
     
    /**
     * 
     * Create custom Dialog windows for your application
     * Custom dialogs rely on custom layouts wich allow you to 
     * create and use your own look & feel.
     * 
     * Under GPL v3 : http://www.gnu.org/licenses/gpl-3.0.html
     * 
     * <a href="http://my.oschina.net/arthor" target="_blank" rel="nofollow">@author</a> antoine vianey
     *
     */
    public class CustomDialog extends Dialog {
     
        public CustomDialog(Context context, int theme) {
            super(context, theme);
        }
     
        public CustomDialog(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 positiveButtonText;
            private String negativeButtonText;
            private View contentView;
     
            private DialogInterface.OnClickListener positiveButtonClickListener, negativeButtonClickListener;
     
            public Builder(Context context) {
                this.context = context;
            }
     
            /**
             * Set the Dialog message from String
             * @param title
             * @return
             */
            public Builder setMessage(String message) {
                this.message = message;
                return this;
            }
     
            /**
             * Set the Dialog message from resource
             * @param title
             * @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;
            }
     
            /**
             * Set a custom content view for the Dialog.
             * If a message is set, the contentView is not
             * added to the Dialog...
             * @param v
             * @return
             */
            public Builder setContentView(View v) {
                this.contentView = v;
                return this;
            }
     
            /**
             * Set the positive button resource and it's listener
             * @param positiveButtonText
             * @param listener
             * @return
             */
            public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) {
                this.positiveButtonText = (String) context.getText(positiveButtonText);
                this.positiveButtonClickListener = listener;
                return this;
            }
     
            /**
             * Set the positive button text and it's listener
             * @param positiveButtonText
             * @param listener
             * @return
             */
            public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) {
                this.positiveButtonText = positiveButtonText;
                this.positiveButtonClickListener = listener;
                return this;
            }
     
            /**
             * Set the negative button resource and it's listener
             * @param negativeButtonText
             * @param listener
             * @return
             */
            public Builder setNegativeButton(int negativeButtonText, DialogInterface.OnClickListener listener) {
                this.negativeButtonText = (String) context.getText(negativeButtonText);
                this.negativeButtonClickListener = listener;
                return this;
            }
     
            /**
             * Set the negative button text and it's listener
             * @param negativeButtonText
             * @param listener
             * @return
             */
            public Builder setNegativeButton(String negativeButtonText, DialogInterface.OnClickListener listener) {
                this.negativeButtonText = negativeButtonText;
                this.negativeButtonClickListener = listener;
                return this;
            }
     
            /**
             * Create the custom dialog
             */
            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);
                dialog.setCanceledOnTouchOutside(false);
                View layout = inflater.inflate(R.layout.custom_dialog_layout, null);
                dialog.addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
                // set the dialog title
                ((TextView) layout.findViewById(R.id.title)).setText(title);
                // set the confirm button
                if (positiveButtonText != null) {
                    ((Button) layout.findViewById(R.id.positiveButton)).setText(positiveButtonText);
                    if (positiveButtonClickListener != null) {
                        ((Button) layout.findViewById(R.id.positiveButton)).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.positiveButton).setVisibility(View.GONE);
                }
                
                // set the cancel button
                if (negativeButtonText != null) {
                    ((Button) layout.findViewById(R.id.negativeButton)).setText(negativeButtonText);
                    if (negativeButtonClickListener != null) {
                        ((Button) layout.findViewById(R.id.negativeButton)).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.negativeButton).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 LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                }
                dialog.setContentView(layout);
                return dialog;
            }
     
        }
     
    }
    

      MainActivity.java:

    package com.example.test;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    
    public class MainActivity extends Activity {
    	private CustomDialog dialog;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		findViewById(R.id.button1).setOnClickListener(new OnClickListener(){
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				CustomDialog.Builder customBuilder = new
    		                CustomDialog.Builder(MainActivity.this);
    		            customBuilder.setTitle("标题")
    		                .setMessage("提示内容")
    		                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
    		                    public void onClick(DialogInterface dialog, int which) {
    		                    	
    		                    }
    		                })
    		                .setPositiveButton("确定", 
    		                        new DialogInterface.OnClickListener() {
    		                    public void onClick(DialogInterface dialog, int which) {
    		                        dialog.dismiss();
    		                    }
    		                });
    		            dialog = customBuilder.create();
    		            dialog.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.main, menu);
    		return true;
    	}
    	
    }
    

      

    http://www.eoeandroid.com/thread-319801-1-1.html

  • 相关阅读:
    个人作业——软件评测
    2020软件工程实践 作业3
    2020软件工程实践 寒假作业2
    2020软件工程实践 寒假作业1
    计网大概
    大写金额转换实现
    软件工程实践总结&个人技术博客
    个人技术博客
    软件评测
    疫情统计实现
  • 原文地址:https://www.cnblogs.com/eustoma/p/3937099.html
Copyright © 2011-2022 走看看