效果展示:
对话框布局文件clip_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginLeft="80dp"
android:layout_marginRight="80dp"
android:background="@drawable/view_radius">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="标题"
android:textColor="@color/black"
android:textSize="@dimen/font_medium"
android:gravity="center"
android:padding="5dp"
/>
<TextView
android:id="@+id/tv_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:text="信息"
android:textColor="@color/black"
android:gravity="center"
android:textSize="@dimen/font_medium"
android:padding="20dp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/grey"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_ok"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="确定"
android:textColor="@color/black"
android:textSize="@dimen/font_medium"
android:gravity="center"
android:padding="5dp"/>
<View
android:id="@+id/line"
android:layout_width="1dp"
android:layout_height="80dp"
android:background="@color/grey"/>
<TextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="取消"
android:textColor="@color/black"
android:textSize="@dimen/font_medium"
android:gravity="center"
android:padding="5dp"/>
</LinearLayout>
</LinearLayout>
圆角布局文件view_radius.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#ffffff"/>
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
</shape>
自定义dialog类,实现对话框
public class ClipDialog extends Dialog implements android.view.View.OnClickListener {
private Context context;
private String title;
private String message;
private String strOk;
private String strCancel;
private OnDialogButtonClickListener listener;
private boolean cancelable = true;
private TextView tv_title;
private TextView tv_message;
private TextView tv_ok;
private TextView tv_cancel;
private View line;
//点击是否可以取消
public boolean isClick=true;
/**
* @param context
* @param title
* @param message
* @param strPositive "确定"类按钮文本
* @param strNegative "取消"类按钮文本
* @param listener
*/
public ClipDialog(Context context, String title, String message,
String strPositive, String strNegative, OnDialogButtonClickListener listener) {
super(context, R.style.MyDialog);
this.context = context;
this.title = title;
this.message = message;
this.strOk = strPositive;
this.strCancel = strNegative;
this.listener = listener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.clip_dialog);
//alertDialog是否可以点击外围消失
//setCanceledOnTouchOutside(cancelable);
//setCancelable(cancelable);
tv_title = (TextView)findViewById(R.id.tv_title);
tv_message =(TextView)findViewById(R.id.tv_message);
tv_ok =(TextView)findViewById(R.id.tv_ok);
tv_cancel =(TextView)findViewById(R.id.tv_cancel);
line=(View)findViewById(R.id.line);
//如果title为空,则隐藏alertDialog标题
if(TextUtils.isEmpty(title)){
tv_title.setVisibility(View.GONE);
}
else{
tv_title.setVisibility(View.VISIBLE);
tv_title.setText(title);
}
//如果没有取消 页隐藏取消按钮
if(TextUtils.isEmpty(strCancel)){
tv_cancel.setVisibility(View.GONE);
line.setVisibility(View.GONE);
tv_ok.setText(strOk);
}
else{
tv_ok.setText(strOk);
tv_cancel.setText(strCancel);
tv_cancel.setOnClickListener(this);
}
tv_ok.setOnClickListener(this);
tv_message.setText(message);
final WindowManager.LayoutParams params = this.getWindow().getAttributes();
params.gravity = Gravity.CENTER;
this.getWindow().setAttributes(params);
}
@Override
public void onClick(final View v) {
if (v.getId() == R.id.tv_ok) {
listener.onDialogButtonClick(true);
} else if (v.getId() == R.id.tv_cancel) {
listener.onDialogButtonClick(false);
}
if(isClick) dismiss();
}
/**
* 自定义Dialog监听器
*/
public interface OnDialogButtonClickListener {
/**
* 点击按钮事件的回调方法
*
* @param isPositive
*/
void onDialogButtonClick(boolean isPositive);
}
}
自定义dialog样式:
<style name="MyDialog">
<!-- alertDialog窗口背景色 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!--dialog是否有边框-->
<item name="android:windowFrame">@null</item>
<!--dialog是否有标题-->
<item name="android:windowNoTitle">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--是否有遮盖(eg.Activity的闪屏页)-->
<item name="android:windowContentOverlay">@null</item>
<!--进出动画-->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<!--背景是否模糊显示-->
<item name="android:backgroundDimEnabled">true</item>
</style>
对话框调用示例
ClipDialog dialog=new ClipDialog(getActivity(),"", "确定退出登录?", "确定", "取消", new ClipDialog.OnDialogButtonClickListener() {
@Override
public void onDialogButtonClick(boolean isPositive) {
if(isPositive){
// TODO Auto-generated method stub
finish();
}
}
});
dialog.show();