Android自定义对话框



import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;



/**
* 对话框
*
*
@date 2015-1-3
*
@version 4.0
*/
public class ECAlertDialog extends Dialog implements View.OnClickListener {

public static final String TAG = "ECDemo.ECAlertDialog";
/**左边按钮*/
public static final int BUTTON_NEGATIVE = 0;
/**中间按钮*/
public static final int BUTTON_NEUTRAL = 1;
/**右边按钮*/
public static final int BUTTON_POSITIVE = 2;
private boolean mDismiss = true;
private boolean mCancelable = true;
private boolean mCanceledOnTouchOutside = false;
private List<Button> mButtons;
/**对话框标题*/
private View mLayoutTitle;
/**对话框内容*/
private ViewGroup mLayoutContent;
/**对话框按钮*/
private View mLayoutButton;

/**
*
@param context
*/
public ECAlertDialog(Context context) {
super(context, R.style.Theme_Light_FullScreenDialogAct);
super.setContentView(R.layout.common_dialog_generic);
initView();
}

/**
*
*/
private void initView() {
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
getWindow().setAttributes(layoutParams);
mButtons = new ArrayList<Button>();
Button leftBtn = (Button) findViewById(R.id.dilaog_button1);
leftBtn.setOnClickListener(this);
mButtons.add(leftBtn);
Button middleBtn = (Button) findViewById(R.id.dilaog_button2);
middleBtn.setOnClickListener(this);
mButtons.add(middleBtn);
Button rightBtn = (Button) findViewById(R.id.dilaog_button3);
rightBtn.setOnClickListener(this);
mButtons.add(rightBtn);
mLayoutTitle = findViewById(R.id.dialog_layout_title);
mLayoutContent = ((ViewGroup) findViewById(R.id.dialog_layout_content));
mLayoutButton = findViewById(R.id.dialog_layout_button);
setCancelable(true);
setCanceledOnTouchOutside(true);
setTitle(R.string.app_tip);
}

public static ECAlertDialog buildAlert(Context ctx, int message,int button , OnClickListener listener) {
return buildAlert(ctx, ctx.getString(message) , ctx.getString(button), listener);
}

public static ECAlertDialog buildAlert(Context ctx, int resId, OnClickListener listener) {
return buildAlert(ctx, resId, android.R.string.cancel, R.string.string_confirm, null, listener);
}

public static ECAlertDialog buildAlert(Context ctx, int resId,
OnClickListener negativeClickListener,
OnClickListener positive) {
return buildAlert(ctx, ctx.getString(resId), ctx.getString(android.R.string.cancel), ctx.getString(R.string.string_confirm), negativeClickListener, positive);
}

public static ECAlertDialog buildAlert(Context ctx, CharSequence message,
OnClickListener listener) {
return buildAlert(ctx, message, ctx.getString(android.R.string.cancel), ctx.getString(R.string.string_confirm), null, listener);
}

public static ECAlertDialog buildAlert(Context ctx, CharSequence message,
OnClickListener negativeClickListener,
OnClickListener positive) {
return buildAlert(ctx, message, ctx.getString(android.R.string.cancel), ctx.getString(R.string.string_confirm), negativeClickListener, positive);
}

public static ECAlertDialog buildAlert(Context ctx, int message,
int leftBtnText, int rightText,
OnClickListener negativeClickListener,
OnClickListener positive) {
return buildAlert(ctx, ctx.getString(message), ctx.getString(leftBtnText), ctx.getString(rightText), negativeClickListener, positive);
}

/**
* 创建对话框
*
@param ctx 上下文
*
@param message 对话框内容
*
@param leftBtnText 取消按钮文本
*
@param rightText 确定按钮文本
*
@param negativeClickListener
* @param positive
* @return
*/
public static ECAlertDialog buildAlert(Context ctx, CharSequence message,
CharSequence leftBtnText, CharSequence rightText,
OnClickListener negativeClickListener,
OnClickListener positive) {
ECAlertDialog dialog = new ECAlertDialog(ctx);
dialog.setMessage(message);
dialog.setButton(BUTTON_NEGATIVE, leftBtnText, negativeClickListener);
dialog.setButton(BUTTON_POSITIVE, rightText, positive);
return dialog;
}

/**
* 创建只有一个按钮的对话框
*
@param ctx
* @param message
* @param text
* @param positive
* @return
*/
public static ECAlertDialog buildAlert(Context ctx, CharSequence message,CharSequence text,
OnClickListener positive) {
ECAlertDialog dialog = new ECAlertDialog(ctx);
dialog.setMessage(message);
dialog.setButton(BUTTON_NEGATIVE, text, positive);
return dialog;
}

public static ECAlertDialog buildPositiveAlert(Context ctx , int resId , OnClickListener listener) {
return buildPositiveAlert(ctx, ctx.getString(resId), listener);
}

/**
*
*
@param ctx
* @param message
* @param listener
* @return
*/
public static ECAlertDialog buildPositiveAlert(Context ctx , CharSequence message , OnClickListener listener) {
ECAlertDialog dialog = new ECAlertDialog(ctx);
dialog.setMessage(message);
dialog.setButton(BUTTON_POSITIVE, ctx.getString(R.string.string_confirm), listener);
return dialog;
}

/**
* 设置对话框按钮
*
@param id
* @param resId
* @param listener
* @return
*/
public final Button setButton(int id , int resId , OnClickListener listener) {
return setButton(resId, getContext().getString(resId), listener);
}

/**
* 设置按钮
*
@param id 按钮号
*
@param text 按钮显示文本
*
@param listener
* @return
*/
public final Button setButton(int id , CharSequence text , OnClickListener listener) {
Button button = mButtons.get(id);
button.setText(text);
button.setVisibility(View.VISIBLE);
setButtonTag(id, listener);
mLayoutButton.setVisibility(View.VISIBLE);
return button;
}

public final ECAlertDialog setButtonTag(int id , OnClickListener listener) {
Button button = mButtons.get(id);
button.setTag(listener);
return this;
}

public final void setMessage(int resId) {
setMessage(getContext().getString(resId));
}

/**
* 设置对话框显示文本
*
@param text
*/
public final void setMessage(CharSequence text) {
((TextView)findViewById(R.id.dialog_tv_message)).setText(text);
}

public final void setTitleNormalColor() {
((TextView)findViewById(R.id.dialog_tv_title)).setTextColor(getContext().getResources().getColor(R.color.text_content));
}

/**
* 设置标题是否可见
*
@param visibility
*/
public final void setTitleVisibility(int visibility) {
mLayoutTitle.setVisibility(visibility);
}

/**
* 设置内容显示区域
*
@param left
* @param top
* @param right
* @param bottom
*/
public final void setContentPadding(int left, int top, int right, int bottom) {
if (left < 0) {
left = mLayoutContent.getPaddingLeft();
}
if (top < 0) {
top = mLayoutContent.getPaddingRight();
}
if (right < 0) {
right = mLayoutContent.getPaddingTop();
}
if (bottom < 0) {
bottom = mLayoutContent.getPaddingBottom();
}
Drawable localDrawable = mLayoutContent.getBackground();
mLayoutContent.setPadding(left, top, right, bottom);
mLayoutContent.setBackgroundDrawable(localDrawable);
}

public final View getContent() {
return mLayoutContent;
}

/**
* 点击按钮不销毁对话框
*/
public void setDismissFalse() {
mDismiss = false;
}

/**
*
*
@param view
* @return
*/
private int getViewLocation(View view) {
for(int i = 0 ; i < mButtons.size() ; i ++) {
if(mButtons.get(i) == view) {
return i;
}
}
return -1;
}

@Override
public void onClick(View v) {
OnClickListener clickListener = (OnClickListener) v.getTag();
if(clickListener != null) {
clickListener.onClick(this, getViewLocation(v));
}
if(mDismiss) {
dismiss();
return ;
}
// mDismiss = true;
}

public void setCancelable(boolean flag) {
super.setCancelable(flag);
mCancelable = flag;
}

public void setCanceledOnTouchOutside(boolean cancel) {
super.setCanceledOnTouchOutside(cancel);
mCanceledOnTouchOutside = cancel;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
if(mCancelable && mCanceledOnTouchOutside && event.getAction() == MotionEvent.ACTION_DOWN) {
cancel();
return true;
}
return super.onTouchEvent(event);
}

/**
* 设置自定义View
*/
public final void setContentView(int resource) {
setContentView(getLayoutInflater().inflate(resource, null));
}

public void setContentView(View contentView) {
if (mLayoutContent.getChildCount() > 0) {
mLayoutContent.removeAllViews();
}
mLayoutContent.addView(contentView);
}

public void setContentView(View child, ViewGroup.LayoutParams params) {
if (mLayoutContent.getChildCount() > 0) {
mLayoutContent.removeAllViews();
}
mLayoutContent.addView(child, params);
}

/**
* 设置对话框标题
*/
public void setTitle(int title) {
setTitle(getContext().getString(title));
}

/**
* 设置对话框标题
*/
public void setTitle(CharSequence text) {
if ((text == null) || (TextUtils.isEmpty(text.toString()))) {
mLayoutContent.setVisibility(View.VISIBLE);
setTitleVisibility(View.GONE);
return;
}
((TextView) findViewById(R.id.dialog_tv_title)).setText(text);
mLayoutContent.setVisibility(View.VISIBLE);
setTitleVisibility(View.VISIBLE);
}

public void show() {
super.show();

int i = 0;
Button btn = null;
Iterator<Button> iterator = mButtons.iterator();
while (iterator.hasNext()) {
Button button = iterator.next();
if(button.getVisibility() != View.VISIBLE) {
continue;
}
++i;
btn = button;
}
if (i == 1) {
btn.setBackgroundResource(R.drawable.btn_dialog_single);
}
if (i == 2) {
btn.setSelected(true);
((ViewGroup.MarginLayoutParams)(this.mButtons.get(0)).getLayoutParams()).rightMargin = 1;
}
if (i == 3) {
btn.setSelected(true);
((ViewGroup.MarginLayoutParams)(this.mButtons.get(2)).getLayoutParams()).leftMargin = 1;
((ViewGroup.MarginLayoutParams)(this.mButtons.get(0)).getLayoutParams()).rightMargin = 1;
}

}


}

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注