`

自定义对话框AlertDialog

 
阅读更多

常用的对话框可以直接调用系统提供的AlertDialog,这过系统提交的对话框比较丑,我们得改写一下:

效果如下:

含确认和取消两按钮的:

 

 

只含取消按钮的:

 

 

 

(1)对话框工具类MyAlertDialogUtil.java:

package com.vvpinche.util;

import android.app.AlertDialog;
import android.content.Context;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

import com.comotech.vv.R;

/**
 * 自定义对话框工具类
 * 
 * @author chenwenbiao
 * @date 2014-5-14 上午10:58:28
 * @version V1.0
 */
public class MyAlertDialogUtil {
	
	private static String TAG = MyAlertDialogUtil.class.getName();
	
	private Context context = null;
	private String title = null;
	private String content = null; 
	private OnClickListener okListener = null;
	private AlertDialog alertDialog = null;
	private boolean needCancelButton = true;//是否需要取消按钮
	
	public MyAlertDialogUtil(Context context, String title,
			String content, boolean needCancelButton ,
			OnClickListener okListener){
		this.context = context;
		this.title = title;
		this.content = content;
		this.okListener = okListener;
		this.needCancelButton = needCancelButton;
	}
	
	
	/**
	 * 获取对话框示例
	 * @param context
	 * @param title	提示框的标题
	 * @param content	提示的内容
	 * @param needCancelButton 是否需要取消按钮
	 * @param okListener 	只显示确定按钮时,可以不用传okListener参数
	 * @return
	 */
	public static MyAlertDialogUtil getInstance(Context context, String title,
			String content, boolean needCancelButton ,
			OnClickListener okListener){
		return new MyAlertDialogUtil(context , title , content , needCancelButton , okListener);
	}
	
	/**
	 * 使用对话框
	 */
	public void showDialog() {
		// WindowManager manager = context.getWindowManager();
		WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
		Display display = manager.getDefaultDisplay();
		int width = display.getWidth();

	    alertDialog = new AlertDialog.Builder(context).create();
		alertDialog.show();
		Window window = alertDialog.getWindow();
		
		//CLog.d(TAG , "my_alert_dialog_height==========>" + context.getResources().getDimension(R.dimen.my_alert_dialog_height));
		//window.setLayout((int) (width * 0.8), (int)(context.getResources().getDimension(R.dimen.my_alert_dialog_height)));
               window.setLayout((int) (width * 0.8), LayoutParams.WRAP_CONTENT);//高度使用包裹方式,不然在小米1机器上显示不了按钮

		// *** 主要就是在这里实现这种效果的.
		// 设置窗口的内容页面,shrew_exit_dialog.xml文件中定义view内容
		window.setContentView(R.layout.my_alert_dialog);

		TextView titleTextView = (TextView) window.findViewById(R.id.my_alert_dialog_title);
		titleTextView.setText(title);
		
		TextView contentTextView = (TextView) window.findViewById(R.id.my_alert_dialog_content);
		contentTextView.setText(content);
		
		View okView = window.findViewById(R.id.my_alert_dialog_ok_layout);
		okView.setOnClickListener(okListener);
		
		
		if(needCancelButton == true){
			/**
			 * 取消按钮
			 */
			View cancelView = window.findViewById(R.id.my_alert_dialog_cancel_layout);
			cancelView.setVisibility(View.VISIBLE);
			cancelView.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					dismiss();
				}
			});
			
			/**
			 * ok 与 cancel的分隔线
			 */
			View divider = window.findViewById(R.id.my_alert_dialog_cancel_ok_divider);
			divider.setVisibility(View.VISIBLE);
		}

		
		/**
		 * 只显示确定按钮时,可以不用传okListener参数
		 */
		if(okListener == null){
			okView.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					dismiss();
				}
			});
		}
	}
	
	/**
	 *  取消对话框
	 */
	public void dismiss(){
		if(alertDialog != null){
			alertDialog.dismiss();
			alertDialog = null;
		}
	}

}

 

 

 

(2)布局文件my_alert_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#222222"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/my_alert_dialog_title"
        android:layout_width="wrap_content"
        android:layout_height="65dp"
        android:layout_gravity="center_vertical"
        android:gravity="center_vertical"
        android:paddingLeft="15dp"
        android:text="快速综合练习"
        android:textColor="@color/titleTextColor"
        android:textSize="24sp" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@color/titleSeparatorColor" />

    <TextView
        android:id="@+id/my_alert_dialog_content"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_gravity="center_vertical"
        android:gravity="center_vertical"
        android:paddingLeft="15dp"
        android:text="确认退出吗?"
        android:textColor="@color/messageTextColor"
        android:textSize="15sp" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@color/buttonSeparatorColor" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:background="@drawable/selector_my_alert_dialog_button"
        android:orientation="horizontal" >

        <RelativeLayout
            android:id="@+id/my_alert_dialog_cancel_layout"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/selector_my_alert_dialog_button"
            android:visibility="gone" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="取消"
                android:textColor="@color/buttonTextColor" />
        </RelativeLayout>

        <View
            android:id="@+id/my_alert_dialog_cancel_ok_divider"
            android:layout_width="1dp"
            android:layout_height="fill_parent"
            android:background="@color/buttonSeparatorColor"
            android:visibility="gone" />

        <RelativeLayout
            android:id="@+id/my_alert_dialog_ok_layout"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/selector_my_alert_dialog_button" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="确定"
                android:textColor="@color/buttonTextColor" />
        </RelativeLayout>
    </LinearLayout>

</LinearLayout>

 

 

(3)对话框的颜色配置文件colors.xml

<?xml version="1.0" encoding="UTF-8"?>
<resources>

	
   <!-- 自定义弹出对话框颜色 -->
	<color name="titleTextColor">#3eb4d8</color>
	<color name="titleSeparatorColor">#3eb4d8</color>
	<color name="messageTextColor">#ffffff</color>
	<color name="buttonTextColor">#ffffff</color>
	<color name="buttonSeparatorColor">#12FFFFFF</color>
	<color name="buttonBackgroundColorNormal">@android:color/transparent</color>
	<color name="buttonBackgroundColorPressed">#e0000000</color>
	<color name="buttonBackgroundColorFocused">#e0000000</color>
	
    
</resources>

 

 

 

(4) 使用简单:

OnClickListener okListener = new OnClickListener() {

								@Override
								public void onClick(View v) {
									hideInputMethod();
									finish();
								}
							};		
							
							
							MyAlertDialogUtil myAlertDialogUtil = MyAlertDialogUtil.getInstance(getActivity(),"温馨提示","确认不发生,直接返回?",true,okListener);
							myAlertDialogUtil.showDialog();

 

 

如我的使用如下在点击事件里调用确认对话框:

(1)含确认和取消按钮

/**
		 * 打电话
		 */
		phoneTextView = (TextView)findViewById(R.id.one_route_detail_phone_tv);
		phoneTextView.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/**
				 * 确认对话框打电话
				 */
				OnClickListener okOnClickListener = new OnClickListener() {
					
					@Override
					public void onClick(View arg0) {
						Intent phoneIntent = new Intent("android.intent.action.CALL",
						Uri.parse("tel:" + route.getPhone()));
						//启动
						startActivity(phoneIntent);
						myAlertDialogUtil.dismiss();//取消对话框
					}
				};
			    myAlertDialogUtil = MyAlertDialogUtil.getInstance(getActivity(),"温馨提示","确认打电话吗?",true, okOnClickListener);
				myAlertDialogUtil.showDialog();
			}
		});
		

 

(2)只要确认按钮(needCancelButton=false&&okOnClickListener=null):

/**
		 * 打电话
		 */
		phoneTextView = (TextView)findViewById(R.id.one_route_detail_phone_tv);
		phoneTextView.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/**
				 * 确认对话框打电话
				 */
				OnClickListener okOnClickListener = new OnClickListener() {
					
					@Override
					public void onClick(View arg0) {
						Intent phoneIntent = new Intent("android.intent.action.CALL",
						Uri.parse("tel:" + route.getPhone()));
						//启动
						startActivity(phoneIntent);
						myAlertDialogUtil.dismiss();//取消对话框
					}
				};
			    myAlertDialogUtil = MyAlertDialogUtil.getInstance(getActivity(),"温馨提示","确认打电话吗?",false, null);
				myAlertDialogUtil.showDialog();
			}
		});

 

 

 

 

  • 大小: 250 KB
  • 大小: 246.7 KB
分享到:
评论

相关推荐

    Android编程实现在自定义对话框中获取EditText中数据的方法

    本文实例讲述了Android编程实现在自定义对话框中获取EditText中数据的方法。分享给大家供大家参考,具体如下: 在项目中忽然遇到这样的问题,需要自定义对话框,对话框需要有一个输入框,以便修改所选中的价格,然后...

    Android例子源码自定义对话框

    在Android开发中,自定义对话框(Dialog)是常见的需求,它可以为用户提供更丰富的交互体验。自定义对话框可以按照应用程序的设计风格进行定制,包括布局、颜色、按钮样式等,从而提升应用的用户体验。本篇将围绕...

    自定义对话框实例,实现

    在IT行业中,自定义对话框是一种常见的用户界面元素,它允许开发者根据应用需求创建具有独特设计和功能的对话框,从而提升用户体验。本实例将详细讲解如何实现自定义对话框,以及通过源码分析来帮助你更好地理解这一...

    自定义对话框的实现

    在Android SDK中,我们可以使用`AlertDialog`、`ProgressDialog`等内置对话框类,但它们可能无法满足所有设计需求,因此自定义对话框显得尤为重要。 创建自定义对话框的第一步是创建一个新的布局文件,这个文件将...

    自定义对话框

    在Android开发中,自定义对话框(Dialog)是一种常见的用户界面元素,用于向用户展示临时信息或进行简短交互。自定义对话框可以提供比普通警告对话框更多的灵活性,允许开发者根据应用的品牌和功能需求定制样式和...

    android自定义对话框、dialog

    总的来说,创建Android自定义对话框需要理解DialogFragment或AlertDialog.Builder的工作原理,以及如何将它们与自定义布局相结合。通过`defineDialog`这样的示例,开发者可以学习到如何从头开始构建一个具有特定功能...

    安卓Android源码——android 自定义对话框.rar

    Android提供了多种内置的对话框类型,如AlertDialog、ProgressDialog和DatePickerDialog等,但有时我们需要更个性化的样式和功能,这就需要自定义对话框。 自定义对话框的实现主要涉及以下步骤: 1. 创建布局:...

    这个示例实现自定义对话框

    在Android开发中,自定义对话框(Custom Dialog)是一种常用的技术,它允许开发者根据特定需求设计和构建对话框,提供更丰富的用户交互体验。本文将深入探讨如何通过XML布局文件和代码来创建自定义对话框,并将其...

    卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)

    在安卓应用开发中,创建一个弹出自定义对话框并自动播放视频的功能,是提升用户体验、吸引用户注意力的有效手段,尤其适用于实现类似视频广告的效果。在这个项目中,我们使用了MediaPlayer和SurfaceView作为视频播放...

    Android自定义对话框(代码)

    在Android开发中,自定义对话框(Custom Dialog)是一种常用的技术,它允许开发者根据应用的UI风格和功能需求创建个性化的对话框。本教程将详细讲解如何在Android中实现自定义对话框,并提供代码示例。 一、Android...

    仿新浪的漂亮的自定义对话框

    首先,自定义对话框与Android原生的AlertDialog相比,最大的优势在于其可定制性。通过自定义布局,开发者可以自由调整对话框的外观,包括背景、文字颜色、按钮样式等,使其与应用的整体风格保持一致。在这个案例中,...

    自定义对话框并响应点击事件

    在Android开发中,自定义对话框(Custom Dialog)是一种常见的用户界面设计技术,它允许开发者根据应用程序的需求创建具有独特外观和交互方式的对话框。本示例(Demo)旨在教你如何自定义对话框的样式,并处理点击...

    安卓自定义对话框

    自定义对话框允许开发者根据应用的UI风格和功能需求,设计出独特且符合用户体验的对话框。本文将深入探讨如何在Android中创建自定义对话框,并介绍一个名为"CrookDialog"的类,它提供了三种不同的样式。 首先,我们...

    Android中自定义对话框的实现

    在Android开发中,自定义对话框(Custom Dialog)是一种常见的用户界面组件,它允许开发者根据应用的风格和需求创建独特的提示或交互界面。本篇将深入探讨如何在Android中实现自定义对话框,并通过示例代码`MyDialog...

    Android自定义对话框Dialog(界面美化)

    在Android开发中,自定义对话框(Dialog)是提升用户体验的重要手段之一,它允许开发者根据应用的风格和需求创建独特且吸引人的交互界面。本文将深入探讨如何在Android中实现自定义对话框,并进行界面美化。 首先,...

    android 自定义对话框

    在Android开发中,自定义对话框(Dialog)是一种常见的用户交互方式,用于向用户展示临时信息或进行简单操作选择。自定义对话框可以帮助我们更好地控制界面的显示样式,使其更符合应用的整体风格和用户需求。下面...

    Android系统对话框和自定义对话框实现

    本教程将深入讲解如何在Android系统中创建和使用标准对话框以及自定义对话框。 首先,Android系统提供了几种内置的对话框类型,包括AlertDialog、ProgressDialog、DatePickerDialog、TimePickerDialog等。这些...

Global site tag (gtag.js) - Google Analytics