常用的对话框可以直接调用系统提供的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();
}
});