package com.netease.nim.uikit.common.ui.dialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.netease.nim.uikit.R;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
/**
* 简单的带有输入框的对话框
*
* Created by huangjun on 2015/5/28.股灾
*/
public class EasyEditDialog extends Dialog {
private TextView mTitleTextView;
private TextView mMessageTextView;
private EditText mEdit;
private TextView mLengthTextView;
private Button mPositiveBtn;
private Button mNegativeBtn;
private int mResourceId;
private View.OnClickListener mPositiveBtnListener;
private View.OnClickListener mNegativeBtnListener;
private String mTitle;
private int mPositiveBtnStrResId = R.string.ok;
private int mNegativeBtnStrResId = R.string.cancel;
private String mMessage;
private String mEditHint;
private int mMaxEditTextLength;
private int mMaxLines = 0;
private boolean mSingleLine = false;
private boolean mShowEditTextLength = false;
private int inputType = -1;
public EasyEditDialog(Context context, int resourceId, int style) {
super(context, style);
mMaxEditTextLength = 16;
if (-1 != resourceId) {
setContentView(resourceId);
this.mResourceId = resourceId;
}
LayoutParams Params = getWindow().getAttributes();
Params.width = LayoutParams.MATCH_PARENT;
Params.height = LayoutParams.MATCH_PARENT;
getWindow().setAttributes(Params);
}
public EasyEditDialog(Context context, int style) {
this(context, -1, style);
mResourceId = R.layout.nim_easy_alert_dialog_with_edit_text;
}
public EasyEditDialog(Context context) {
this(context, R.style.sdk_share_dialog);
mResourceId = R.layout.nim_easy_alert_dialog_with_edit_text;
}
public void setTitle(String title) {
if (null != title) {
this.mTitle = title;
if (null != mTitleTextView)
mTitleTextView.setText(title);
}
}
public void setMessage(String message) {
if (null != message) {
this.mMessage = message;
if (null != mMessageTextView)
mMessageTextView.setText(message);
}
}
public void setEditHint(String hint) {
if (!TextUtils.isEmpty(hint)) {
this.mEditHint = hint;
if (null != mEdit) {
mEdit.setHint(hint);
}
}
}
public void setInputType(int type) {
this.inputType = type;
}
public void setEditTextMaxLength(int maxLength) {
this.mMaxEditTextLength = maxLength;
this.mShowEditTextLength = true;
}
public void setEditTextMaxLines(int maxLines) {
this.mMaxLines = maxLines;
}
public void setEditTextSingleLine() {
this.mSingleLine = true;
}
public void addPositiveButtonListener(View.OnClickListener positiveBtnListener) {
this.mPositiveBtnListener = positiveBtnListener;
}
public void addPositiveButtonListener(int resId, View.OnClickListener positiveBtnListener) {
this.mPositiveBtnStrResId = resId;
this.mPositiveBtnListener = positiveBtnListener;
}
public void addNegativeButtonListener(View.OnClickListener negativeBtnListener) {
this.mNegativeBtnListener = negativeBtnListener;
}
public void addNegativeButtonListener(int resId, View.OnClickListener negativeBtnListener) {
this.mNegativeBtnStrResId = resId;
this.mNegativeBtnListener = negativeBtnListener;
}
public int getResourceId() {
return mResourceId;
}
public void setResourceId(int resourceId) {
this.mResourceId = resourceId;
}
public Button getPositiveBtn() {
return mPositiveBtn;
}
public Button getNegativeBtn() {
return mNegativeBtn;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mResourceId);
try {
LinearLayout root = (LinearLayout) findViewById(R.id.easy_edit_dialog_root);
ViewGroup.LayoutParams params = root.getLayoutParams();
params.width = (int) ScreenUtil.getDialogWidth();
root.setLayoutParams(params);
if (mTitle != null) {
mTitleTextView = (TextView) findViewById(R.id.easy_dialog_title_text_view);
mTitleTextView.setText(mTitle);
}
if (mMessage != null) {
mMessageTextView = (TextView) findViewById(R.id.easy_dialog_message_text_view);
mMessageTextView.setText(mMessage);
mMessageTextView.setVisibility(View.VISIBLE);
}
mEdit = (EditText) findViewById(R.id.easy_alert_dialog_edit_text);
mLengthTextView = (TextView) findViewById(R.id.edit_text_length);
// mEdit.setFilters(new InputFilter[] { new InputFilter.LengthFilter(mMaxEditTextLength) });
mLengthTextView.setVisibility(mShowEditTextLength ? View.VISIBLE : View.GONE);
if (inputType != -1) {
mEdit.setInputType(inputType);
}
mEdit.addTextChangedListener(new EditTextWatcher(mEdit, mLengthTextView, mMaxEditTextLength,
mShowEditTextLength));
if (!TextUtils.isEmpty(mEditHint)) {
mEdit.setHint(mEditHint);
}
if (mMaxLines > 0) {
mEdit.setMaxLines(mMaxLines);
}
if (mSingleLine) {
mEdit.setSingleLine();
}
mPositiveBtn = (Button) findViewById(R.id.easy_dialog_positive_btn);
if (mPositiveBtnStrResId != 0) {
mPositiveBtn.setText(mPositiveBtnStrResId);
}
mPositiveBtn.setOnClickListener(mPositiveBtnListener);
mNegativeBtn = (Button) findViewById(R.id.easy_dialog_negative_btn);
if (mNegativeBtnStrResId != 0) {
mNegativeBtn.setText(mNegativeBtnStrResId);
}
mNegativeBtn.setOnClickListener(mNegativeBtnListener);
mNegativeBtn.setVisibility(View.VISIBLE);
findViewById(R.id.easy_dialog_btn_divide_view).setVisibility(View.VISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
public String getEditMessage() {
if (mEdit != null)
return mEdit.getEditableText().toString();
else return null;
}
public static class EditTextWatcher implements TextWatcher {
private EditText editText;
private TextView lengthTV;
private int maxLength;
private boolean show = false;
public EditTextWatcher(EditText editText, TextView lengthTV, int maxLength, boolean show) {
this.maxLength = maxLength;
this.editText = editText;
this.lengthTV = lengthTV;
this.show = show;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (editText == null)
return;
int editStart = editText.getSelectionStart();
int editEnd = editText.getSelectionEnd();
editText.removeTextChangedListener(this);
while (StringUtil.counterChars(s.toString()) > maxLength) {
s.delete(editStart - 1, editEnd);
editStart--;
editEnd--;
}
editText.setSelection(editStart);
editText.addTextChangedListener(this);
if (show && lengthTV != null) {
long remainLength = maxLength - StringUtil.counterChars(s.toString());
lengthTV.setText("" + remainLength / 2);
lengthTV.setVisibility(View.VISIBLE);
}
}
}
}