1.先扩展android系统自带的Dialog,将布局与主题属性全抛出来,实现数据与视图分离:
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
/**
* 自定义对话框
*
* Created by XiaobingLiu on 2016/10/26.
*/
public class CustomDialog extends Dialog implements View.OnClickListener
{
private int layoutRes;
private Context context;
private int nComfirmBtnID;
private int nCancelBtnID;
private DialogCallbackListener mCancelClickListener;
private DialogCallbackListener mConfirmClickListener;
private View yes;
private View no;
public CustomDialog(Context context)
{
super(context);
this.context = context;
}
/**
* 需要自定义对话框时使用下面构造器
*
* @param context
* @param resLayout
*/
public CustomDialog(Context context,int resLayout)
{
super(context);
this.context = context;
this.layoutRes = resLayout;
}
/**
* 需要自定义对话框同时使用样式时使用下面构造器
* @param context
* @param theme
* @param resLayout
* @param nComfirmBtnID
* @param nCancelBtnID
*/
public CustomDialog(Context context, int theme,int resLayout,int nComfirmBtnID,int nCancelBtnID)
{
super(context, theme);
this.context = context;
this.layoutRes= resLayout;
this.nCancelBtnID = nCancelBtnID;
this.nComfirmBtnID = nComfirmBtnID;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(layoutRes);
yes = getView(this.nComfirmBtnID);
no = getView(this.nCancelBtnID);
yes.setOnClickListener(this); //注册这个按钮事件
no.setOnClickListener(this);
}
/**
* 获取控件对象
* @param id
* @param <E>
* @return
*/
public <E extends View>E getView(int id)
{
return (E) findViewById(id);
}
/**
* 设置宽高.透明度
* @param nScreenWidth
* @param nScreenHeight
* @param fAlpha 取 0~1
*/
public void setWidthAndHeight(int nScreenWidth,int nScreenHeight,float fAlpha)
{
Window dialogWindow = this.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
dialogWindow.setGravity(Gravity.CENTER);
lp.width = DisplayUtils.dip2px(nScreenWidth);
lp.height = DisplayUtils.dip2px(nScreenHeight);
lp.alpha = fAlpha;
dialogWindow.setAttributes(lp);
}
/**
* 设置点击对话框其他地方是否关闭
*
* @param bIsClose
*/
public void setCloseOnTouchOutside(boolean bIsClose)
{
this.setCanceledOnTouchOutside(bIsClose);
}
/**
* 按钮点击事件,使用方法:
* 在使用的地方扩展DialogCallbackListener,然后调用下面两个接口即可
* @param listener
* @return
*/
public void setCancelClickListener(DialogCallbackListener listener)
{
mCancelClickListener = listener;
}
public void setConfirmClickListener(DialogCallbackListener listener)
{
mConfirmClickListener = listener;
}
/**
* 此处处理对话框的事件回调
* @param v
*/
@Override
public void onClick(View v)
{
if (v.getId() == nCancelBtnID)
{
if (mCancelClickListener != null)
{
mCancelClickListener.onClick(CustomDialog.this);
}
dismiss();
}
else if (v.getId() == nComfirmBtnID)
{
if (mConfirmClickListener != null)
{
mConfirmClickListener.onClick(CustomDialog.this);
}
else
{
dismiss();
}
}
}
}
下面是接口类:
/**
* 对话框中的确认与取消事件监听回调接口
*
* Created by yourdream on 2016/10/27.
*/
public interface DialogCallbackListener
{
void onClick(CustomDialog cDialog);
}
1.对话框的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/dialog_background"
android:gravity="center"
android:minHeight="354dp"
android:minWidth="325dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:maxLines="1"
android:text="@string/str_chkphone"
android:textColor="@color/cyzs_purple_8A5899"
android:textSize="12sp"/>
<!--用户信息-->
<FrameLayout
android:id="@+id/warning_frame"
android:layout_width="97dp"
android:layout_height="105dp"
android:layout_marginTop="30dp"
android:background="#f6f6f6">
<!--用户头像只是一个普通 的imageview-->
<com.yourdream.app.android.widget.CYZSDraweeView
fresco:roundAsCircle="true"
fresco:placeholderImage="@drawable/default_avatar"
android:id="@+id/img_bindhead"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="15dp"
android:layout_gravity="center_horizontal"
android:layout_centerInParent="true"
fresco:failureImage="@drawable/default_avatar"
fresco:failureImageScaleType="centerInside"
fresco:actualImageScaleType="centerInside"/>
<TextView
android:id="@+id/bind_user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="要打小怪瘦"
android:gravity="center"
android:layout_gravity="bottom|center_horizontal"
android:textColor="@color/cyzs_gray_333333"
android:layout_marginBottom="12dp" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="@string/str_bindinfotips1"
android:textColor="@color/cyzs_gray_333333"
android:textSize="12sp"
android:visibility="visible"/>
<TextView
android:id="@+id/txt_bindact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/str_bindinfotips2"
android:textColor="@color/cyzs_gray_333333"
android:textSize="12sp"
android:visibility="visible"/>
<ImageView
android:layout_width="250dp"
android:layout_height="24dp"
android:src="@drawable/bind_account"
android:layout_gravity="center_horizontal"
android:layout_marginTop="12dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="38dp"
android:gravity="center">
<TextView
android:id="@+id/txt_cancel_button"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/str_thinkagain"
android:background="#a179ad"
android:textSize="14sp"
android:visibility="visible"
android:textColor="@color/white"/>
<TextView
android:id="@+id/txt_confirm_button"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/str_justdoit"
android:background="#8a5899"
android:textColor="@color/white"
android:textSize="14sp"
android:visibility="visible" />
</LinearLayout>
</LinearLayout>
2.实例对话框对象,注意要设置对话框属性,需要钭对话框先显示之后才能设置:即Setwidth,setHeigth应该在show之后
/**
* 初始化合并账号对话框
*/
private void initDialog()
{
ConbineDialog = new CustomDialog(BindPhoneActivity.this,R.style.alert_dialog,R.layout.layout_bind_phonenumdialog,R.id.txt_confirm_button,R.id.txt_cancel_button);
}
/**
* 显示合并账号对话框
*
* @param UserName
* @param HeadURL
*/
private static void showConbineDialog(String UserName,String HeadURL)
{
ConbineDialog.show();
mAvatar = (CYZSDraweeView)ConbineDialog.findViewById(R.id.img_bindhead);
txtUserName = (TextView)ConbineDialog.findViewById(R.id.bind_user_name);
ConbineDialog.setConfirmClickListener(new ConfirmConbineBtn());
UIUtils.displayAvatarImage(HeadURL, mAvatar);
txtUserName.setText(UserName);
}
/**
* 确认合并的回调
*/
private static class ConfirmConbineBtn implements DialogCallbackListener
{
@Override
public void onClick(CustomDialog cDialog)
{
UserController userController = UserController.getInstance(AppContext.baseContext);
userController.ComfirMergein(nfromUserId,userActInfo[2],Integer.parseInt(AppContext.userId),ConbineResponseHandler());
}
}