Android java 弹框功能
1、样式
2、创建样式
shape_my_alert_dialog_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ffffff" />
<corners android:radius="5dp" />
</shape>
3、创建layout
view_my_alert_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lLayout_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_my_alert_dialog_bg"
android:orientation="vertical">
<TextView
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="15dp"
android:gravity="center"
android:textColor="#000000"
android:textSize="18sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/img_title_line"
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="10dp"
android:background="#d2d2d2" />
<TextView
android:id="@+id/txt_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="20dp"
android:adjustViewBounds="true"
android:fadeScrollbars="true"
android:gravity="center"
android:scrollbars="vertical"
android:textColor="#000000"
android:textSize="16sp" />
<ImageView
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="20dp"
android:background="#d2d2d2" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_neg"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackground"
android:gravity="center"
android:textColor="#000000"
android:textSize="16sp" />
<ImageView
android:id="@+id/img_line"
android:layout_width="1px"
android:layout_height="45dp"
android:background="#d2d2d2" />
<Button
android:id="@+id/btn_pos"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackground"
android:gravity="center"
android:textColor="#1793FD"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
4、创建Check工具类
CheckUtil.java
public class CheckUtil {
/**
* <strong>判断一个字符序列是否为空</strong>
* <ul>
* <li>如果字符序列对象为空则返回true</li>
* <li>如果字符序列所有字符均为空格则返回true</li>
* </ul>
*
* @param cs 需要判断的字符序列对象
* @return 结果为空返回true,否则为false
*/
public static boolean stringIsBlank(CharSequence cs) {
if (cs == null) {
return true;
}
int strlen = cs.length();
if (strlen == 0) {
return true;
}
if ("null".equals(cs)) {
return true;
}
for (int i = 0; i < strlen; i++) {
if (!Character.isWhitespace(cs.charAt(i))) {
return false;
}
}
return true;
}
}
5、创建Alert工具类
MyAlertDialog.java
/**
* 自定义的AlertDialog
*/
public class MyAlertDialog {
private Dialog dialog;
private TextView txt_title;
private TextView txt_msg;
private Button btn_neg;
private Button btn_pos;
private ImageView img_title_line;
private ImageView img_line;
private boolean showTitle = false;
private boolean showMsg = false;
private boolean showPosBtn = false;
private boolean showNegBtn = false;
private boolean clickDismiss = true;
public MyAlertDialog(Context context) {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
// 获取Dialog布局
View view = LayoutInflater.from(context).inflate(R.layout.view_my_alert_dialog, null);
// 获取自定义Dialog布局中的控件
LinearLayout lLayout_bg = (LinearLayout) view.findViewById(R.id.lLayout_bg);
txt_title = (TextView) view.findViewById(R.id.txt_title);
txt_title.setVisibility(View.GONE);
txt_msg = (TextView) view.findViewById(R.id.txt_msg);
txt_msg.setVisibility(View.GONE);
btn_neg = (Button) view.findViewById(R.id.btn_neg);
btn_neg.setVisibility(View.GONE);
btn_pos = (Button) view.findViewById(R.id.btn_pos);
btn_pos.setVisibility(View.GONE);
img_title_line = (ImageView) view.findViewById(R.id.img_title_line);
img_title_line.setVisibility(View.GONE);
img_line = (ImageView) view.findViewById(R.id.img_line);
img_line.setVisibility(View.GONE);
// 定义Dialog布局和参数
dialog = new Dialog(context, R.style.CommonDialogStyle);
dialog.setContentView(view);
dialog.setCanceledOnTouchOutside(false);
// 调整dialog宽度
lLayout_bg.setLayoutParams(new FrameLayout.LayoutParams((int) (displayMetrics.widthPixels * 0.75), LayoutParams.WRAP_CONTENT));
//设置消息的最大高度
txt_msg.setMaxHeight((int) (displayMetrics.heightPixels * 0.45));
//如果消息高度过长,设置可以上下滑动
txt_msg.setMovementMethod(ScrollingMovementMethod.getInstance());
}
public MyAlertDialog setTitle(String title) {
showTitle = true;
if (CheckUtil.stringIsBlank(title)) {
txt_title.setText("标题");
} else {
txt_title.setText(title);
}
return this;
}
public MyAlertDialog setMsg(String msg, boolean gravityCenter) {
showMsg = true;
if (CheckUtil.stringIsBlank(msg)) {
txt_msg.setText("内容");
} else {
txt_msg.setText(msg);
}
if (gravityCenter) {
txt_msg.setGravity(Gravity.CENTER);
} else {
txt_msg.setGravity(Gravity.START);
}
return this;
}
public MyAlertDialog setCancelable(boolean cancel) {
dialog.setCancelable(cancel);
return this;
}
public MyAlertDialog setCanceledOnTouchOutside(boolean cancel) {
dialog.setCanceledOnTouchOutside(cancel);
return this;
}
public void setClickDismiss(boolean dismissWhenClick) {
clickDismiss = dismissWhenClick;
}
public MyAlertDialog setPositiveButton(String text, final OnClickListener listener) {
showPosBtn = true;
if (CheckUtil.stringIsBlank(text)) {
btn_pos.setText("确定");
} else {
btn_pos.setText(text);
}
btn_pos.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (clickDismiss) {
dialog.dismiss();
}
if (listener != null) {
listener.onClick(v);
}
}
});
return this;
}
public MyAlertDialog setNegativeButton(String text, final OnClickListener listener) {
showNegBtn = true;
if (CheckUtil.stringIsBlank(text)) {
btn_neg.setText("取消");
} else {
btn_neg.setText(text);
}
btn_neg.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (clickDismiss) {
dialog.dismiss();
}
if (listener != null) {
listener.onClick(v);
}
}
});
return this;
}
private void setLayout() {
if (!showTitle && !showMsg) {
txt_title.setText("提示");
txt_title.setVisibility(View.VISIBLE);
img_title_line.setVisibility(View.VISIBLE);
}
if (showTitle) {
txt_title.setVisibility(View.VISIBLE);
img_title_line.setVisibility(View.VISIBLE);
}
if (showMsg) {
txt_msg.setVisibility(View.VISIBLE);
}
if (!showPosBtn && !showNegBtn) {
btn_pos.setText("确定");
btn_pos.setVisibility(View.VISIBLE);
btn_pos.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
if (showPosBtn && showNegBtn) {
btn_pos.setVisibility(View.VISIBLE);
btn_neg.setVisibility(View.VISIBLE);
img_line.setVisibility(View.VISIBLE);
}
if (showPosBtn && !showNegBtn) {
btn_pos.setVisibility(View.VISIBLE);
}
if (!showPosBtn && showNegBtn) {
btn_neg.setVisibility(View.VISIBLE);
}
}
public void show() {
setLayout();
dialog.show();
}
}
6、使用功能
在Activity中使用
txtMyLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new MyAlertDialog(getContext())
.setTitle("提示")
.setMsg("确定退出吗", true)
.setPositiveButton("确定", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
})
.setNegativeButton("取消",null)
.show();
}
});