1.效果对比图
2.对话框布局--confirm_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/confimDialogRoot"
android:layout_width="@dimen/dialogBase_width"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/common_alert_bg" >
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tvContent"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/tvContent"
android:layout_marginTop="@dimen/dialogBase_title_marginTop"
android:ellipsize="end"
android:gravity="center"
android:singleLine="true"
android:text="标题栏示例"
android:textColor="@color/black"
android:textSize="@dimen/dialogBase_title_textSize" />
<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tvTitle"
android:layout_marginBottom="@dimen/dialogBase_body_marginBottom"
android:layout_marginLeft="@dimen/dialogBase_body_marginLeft"
android:layout_marginRight="@dimen/dialogBase_body_marginRight"
android:layout_marginTop="@dimen/dialogBase_body_marginTop"
android:gravity="center_horizontal|left"
android:text="正文内容示例\n\n1.正文内容示例正文内容示例正文内容示例正文内容示例\n2.正文内容示例"
android:textColor="@color/black"
android:textSize="@dimen/dialogBase_content_textSize" />
<View
android:id="@+id/horizontalDividerLine"
android:layout_width="match_parent"
android:layout_height="@dimen/dialogBase_divider_width"
android:layout_below="@+id/tvContent"
android:background="@color/dialog_gray" />
<Button
android:id="@+id/btnSingle"
android:layout_width="match_parent"
android:layout_height="@dimen/dialogBase_btnHeight"
android:layout_below="@+id/horizontalDividerLine"
android:background="@drawable/common_dialog_single_button"
android:ellipsize="end"
android:singleLine="true"
android:text="确定"
android:textColor="@color/dialog_blue"
android:textSize="@dimen/dialogBase_button_textSize" />
</RelativeLayout>
3.自定义Dialog--ConfirmDialog.java
/**
*
*/
package com.example.qq.overall.view;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.TextView;
import com.example.qq.R;
import com.example.qq.overall.interfaces.CustomDialogInterface.OnClickListenter;
/**
* Description: 只有一个按钮的对话框
*
* @author danDingCongRong
* @Version 1.0.0
* @Created at 2014-7-17 19:50:49
* @Modified by [作者] on [修改日期]
*/
public class ConfirmDialog extends Dialog {
private CharSequence title;
private CharSequence content;
private CharSequence btnText;
private OnClickListenter btnSingleOnClickListener;
private ConfirmDialog(Context context) {
super(context);
}
private ConfirmDialog(Context context, int theme) {
super(context, theme);
}
public static class Builder {
private Context context;
private ConfirmDialog dialog;
public Builder(Context context) {
this.context = context;
this.dialog = new ConfirmDialog(context, R.style.AlertDialog);
}
public Builder setTitle(CharSequence title) {
dialog.title = title;
return this;
}
public Builder setContent(CharSequence content) {
dialog.content = content;
return this;
}
public Builder setSingleButton(CharSequence text,
OnClickListenter onClickListenter) {
dialog.btnText = text;
dialog.btnSingleOnClickListener = onClickListenter;
return this;
}
public ConfirmDialog create() {
View view = initView();
dialog.setContentView(view);
dialog.setCanceledOnTouchOutside(true);
return dialog;
}
private View initView() {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService("layout_inflater");
View view = inflater.inflate(R.layout.confirm_dialog, null);
TextView tvTitle = (TextView) view.findViewById(R.id.tvTitle);
TextView tvContent = (TextView) view.findViewById(R.id.tvContent);
Button btnSingle = (Button) view.findViewById(R.id.btnSingle);
tvTitle.setText(dialog.title);
tvContent.setText(dialog.content);
btnSingle.setText(dialog.btnText);
btnSingle.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.btnSingle
&& MotionEvent.ACTION_UP == event.getAction()) {
dialog.btnSingleOnClickListener.onClick(v);
dialog.dismiss();
}
return false;
}
});
return view;
}
}
}
/**
*
*/
package com.example.qq.overall.interfaces;
import android.view.View;
/**
* Description: 自定义对话框中的接口
*
* @author danDingCongRong
* @Version 1.0.0
* @Created at 2014-7-17 08:50:40
* @Modified by [作者] on [修改日期]
*/
public interface CustomDialogInterface {
public static interface OnClickListenter {
public void onClick(View v);
}
}
4.测试代码
public void singleButtonDialog(View view) {
ConfirmDialog.Builder builder = new ConfirmDialog.Builder(context);
builder.setTitle("SD卡不可用");
builder.setContent("SD卡不可用,传文件、图片相关等部分功能将不能正常使用!");
builder.setSingleButton("确定",
new CustomDialogInterface.OnClickListenter() {
@Override
public void onClick(View v) {
Toast.makeText(context, "成功了!!!!!", Toast.LENGTH_LONG)
.show();
}
});
ConfirmDialog dialog = builder.create();
dialog.show();
}
5.其他相关资源文件
<!-- 自定义的对话框 -->
<dimen name="dialogBase_title_textSize">20sp</dimen>
<dimen name="dialogBase_content_textSize">16sp</dimen>
<dimen name="dialogBase_button_textSize">16sp</dimen>
<dimen name="dialogBase_width">310.0dp</dimen>
<dimen name="dialogBase_title_marginTop">15.0dp</dimen>
<dimen name="dialogBase_body_paddingLeft">15.0dp</dimen>
<dimen name="dialogBase_body_paddingRight">15.0dp</dimen>
<dimen name="dialogBase_body_marginTop">10.0dp</dimen>
<dimen name="dialogBase_body_marginBottom">10.0dp</dimen>
<dimen name="dialogBase_body_marginLeft">15.0dp</dimen>
<dimen name="dialogBase_body_marginRight">15.0dp</dimen>
<dimen name="dialogBase_body_max_height">420.0dp</dimen>
<dimen name="dialogBase_btnHeight">44.0dp</dimen>
<dimen name="dialogBase_divider_width">1.0px</dimen>
<!-- 自定义对话框 CustomDialog -->
<color name="transparent">#00000000</color>
<color name="dialog_gray">#34000000</color>
<color name="dialog_blue">#ff0079ff</color>
<!-- 自定义CustomDialog样式 -->
<style name="AlertDialog" parent="@android:style/Theme.Translucent">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/common_alert_btn_pressed" android:state_pressed="true"/>
<item android:drawable="@color/transparent"/>
</selector>