app的自定义Dialog层出不穷,下面介绍下我在自定义Dialog的整理之路
首先给自己的Dialog一个布局
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<RelativeLayout
android:layout_width="260dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_circular6_w">
<LinearLayout
android:id="@+id/ll_ordinary_title"
android:layout_width="match_parent"
android:layout_height="80dp"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_ordinary_content1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:text=" 账号在别处登陆,您被迫下线\n若非本人操作,请尽快修改密码"
android:textColor="#444444"/>
<TextView
android:id="@+id/tv_ordinary_content2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:text=" 账号在别处登陆,您被迫下线\n若非本人操作,请尽快修改密码"
android:textColor="#444444"
android:visibility="gone"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_below="@id/ll_ordinary_title"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_ordinary_cancel"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/bg_circular6_gw"
android:clickable="true"
android:gravity="center"
android:text="取消"
android:textColor="#6e6e6e"/>
<TextView
android:id="@+id/tv_ordinary_confirm"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/bg_circular6_gw"
android:clickable="true"
android:gravity="center"
android:text="确定"
android:textColor="#6e6e6e"/>
</LinearLayout>
<View
android:layout_width="1px"
android:layout_height="40dp"
android:layout_below="@id/ll_ordinary_title"
android:layout_centerHorizontal="true"
android:background="#6e6e6e"/>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_below="@id/ll_ordinary_title"
android:background="#6e6e6e"/>
</RelativeLayout>
</RelativeLayout>
点击颜色选择器 bg_circular6_gw
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_circular6_g" android:state_pressed="true"/>
<item android:drawable="@drawable/bg_circular6_w"/>
</selector>
两种颜色 bg_circular6_g、bg_circular6_w 其实是圆角的但是不注意是看不出来的
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="6dp"/>
<solid android:color="#f4f4f4"/>
</shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="6dp"/>
<solid android:color="#ffffff"/>
</shape>
接下来就是自定义的主要代码了:
可以链条式设置赋值和点击事件
/**
* 作者: CoolTone
* 描述: 自定义普通 Dialog
* 用于单句提示、双句居中提示
* 链条式设置赋值、监听
* 可设置确定、取消的文本提示
*/
public class OrdinaryDialog extends Dialog {
private TextView mYes; // 确定
private TextView mNo; // 取消
private TextView mContent1; // 消息提示文本
private TextView mContent2; // 消息提示文本
private String sContent1; // 外界描述的消息文本
private String sContent2; // 外界描述的消息文本
private String sYes, sNo; // 确定文本 取消文本的显示内容
private onNoOnclickListener mNoOnclickListener; // 取消按钮被点击了的监听器
private onYesOnclickListener mYesOnclickListener; // 确定按钮被点击了的监听器
private static OrdinaryDialog mDialog; // 链条式方法
public OrdinaryDialog setNoOnclickListener(onNoOnclickListener onNoOnclickListener) {
mNoOnclickListener = onNoOnclickListener;
return mDialog;
}
public OrdinaryDialog setYesOnclickListener(onYesOnclickListener onYesOnclickListener) {
mYesOnclickListener = onYesOnclickListener;
return mDialog;
}
public static OrdinaryDialog newInstance(Context context) {
mDialog = new OrdinaryDialog(context);
return mDialog;
}
private OrdinaryDialog(Context context) {
super(context, R.style.ordinaryDialog);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_ordinary);
// Window window = getWindow();
// WindowManager.LayoutParams lp = window.getAttributes();
// lp.alpha = 0.9f;
// window.setAttributes(lp);
setCanceledOnTouchOutside(false); // 按空白处
initView(); // 初始化界面控件
initData(); // 初始化界面数据
initEvent(); // 初始化界面控件的事件
}
private void initEvent() {
mYes.setOnClickListener(new View.OnClickListener() {//确定 点击的外界监听
@Override
public void onClick(View v) {
if (mYesOnclickListener != null) {
mYesOnclickListener.onYesClick();
}
}
});
mNo.setOnClickListener(new View.OnClickListener() {//取消 点击的外界监听
@Override
public void onClick(View v) {
if (mNoOnclickListener != null) {
mNoOnclickListener.onNoClick();
}
}
});
}
private void initData() { // 外界设置控件显示
if (sContent1 != null) {
mContent1.setText(sContent1);
}
if (sContent2 != null) {
mContent2.setText(sContent2);
}
mContent2.setVisibility(sContent2 != null ? View.VISIBLE : View.GONE);
if (sYes != null) {
mYes.setText(sYes);
}
if (sNo != null) {
mNo.setText(sNo);
}
}
private void initView() {
mYes = (TextView) findViewById(R.id.tv_ordinary_confirm);
mNo = (TextView) findViewById(R.id.tv_ordinary_cancel);
mContent1 = (TextView) findViewById(R.id.tv_ordinary_content1);
mContent2 = (TextView) findViewById(R.id.tv_ordinary_content2);
}
// 设置信息文本
public OrdinaryDialog setMessage1(String message) {
sContent1 = message;
return mDialog;
}
// 设置信息文本
public OrdinaryDialog setMessage2(String message) {
sContent2 = message;
return mDialog;
}
// 设置确定文本
public OrdinaryDialog setConfirm(String confirm) {
sYes = confirm;
return mDialog;
}
// 设置取消文本
public OrdinaryDialog setCancel(String cancel) {
sNo = cancel;
return mDialog;
}
public OrdinaryDialog showDialog() {
mDialog.show();
return mDialog;
}
public interface onYesOnclickListener {
void onYesClick();
}
public interface onNoOnclickListener {
void onNoClick();
}
}
使用时 用返回的 OrdinaryDialog 监听和赋值 也可以连点
* 注意: 一定要 .showDialog() 方法