|
package com.electric.chargingpile.fragment;
import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.v4.app.DialogFragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.electric.chargingpile.R;
import com.electric.chargingpile.iview.SoftKeyBoardListener;
import com.electric.chargingpile.util.DensityUtil;
public class CommonDialogFragment extends DialogFragment {
public static final String DialogTypeComment = "dialog_type_comment";
public static final String DialogTypeReply = "dialog_type_reply";
private static final String TAG = "CommonDialogFragment";
private static final String ARG_COMMENT = "comment";
private static final String ARG_HINT = "hint";
private static final String ARG_TYPE = "type";
private Dialog dialogFragment;
private String type;
private EditText editText;
private TextView send;
public OnCommonDialogFragmentListener commonDialogFragmentListener;
private ImageView dialogIcon;
private ConstraintLayout countInfo;
private TextView count;
public static CommonDialogFragment newInstance(String comment,String hint, String type) {
CommonDialogFragment dialogFragment = new CommonDialogFragment();
Bundle args = new Bundle();
args.putString(ARG_COMMENT, comment);
args.putString(ARG_HINT, hint);
args.putString(ARG_TYPE, type);
dialogFragment.setArguments(args);
return dialogFragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final String comment = getArguments().getString(ARG_COMMENT);
final String hint = getArguments().getString(ARG_HINT);
type = getArguments().getString(ARG_TYPE);
dialogFragment = new Dialog(getActivity(), R.style.BottomDialog);
// 外部点击设置为可取消
dialogFragment.setCancelable(true);
dialogFragment.setCanceledOnTouchOutside(true);
dialogFragment.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialogFragment.setContentView(R.layout.fragment_common_dialog);
Window window = dialogFragment.getWindow();
WindowManager.LayoutParams layoutParams = window.getAttributes();
// 布局属性位于整个窗口底部
layoutParams.gravity = Gravity.BOTTOM;
// 布局属性宽度填充整个窗口,默认是有margin的
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(layoutParams);
countInfo = dialogFragment.findViewById(R.id.countInfo);
count = dialogFragment.findViewById(R.id.count);
dialogIcon = dialogFragment.findViewById(R.id.dialogIcon);
editText = dialogFragment.findViewById(R.id.dialogEdit);
send = dialogFragment.findViewById(R.id.dialogPublish);
editText.setText(comment);
editText.setSelection(comment.length());
editText.setHint(hint);
updateView(comment);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (commonDialogFragmentListener != null && editText.getText().toString().trim().length() > 0) {
if (DialogTypeComment.equals(type)) {
commonDialogFragmentListener.publish();
} else {
commonDialogFragmentListener.reply();
}
dismiss();
}
}
});
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
String comment = charSequence.toString().trim();
if (comment.length() > 200) {
comment = comment.substring(0, 200);
editText.setText(comment);
editText.setSelection(comment.length());
}
updateView(comment);
if (commonDialogFragmentListener != null) {
if (DialogTypeComment.equals(type)) {
commonDialogFragmentListener.updateComment(comment);
} else {
commonDialogFragmentListener.updateReply(comment);
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
// 键盘打开隐藏监听
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(getContext().INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
SoftKeyBoardListener.setListener(getActivity(), new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {
@Override
public void keyBoardShow(int height) {
}
@Override
public void keyBoardHide(int height) {
dialogFragment.dismiss();
}
});
return dialogFragment;
}
private void updateView(String comment) {
ConstraintLayout.LayoutParams editParams = (ConstraintLayout.LayoutParams) editText.getLayoutParams();
if (comment.length() > 0) {
dialogIcon.setVisibility(View.GONE);
send.setTextColor(Color.parseColor("#00EDB2"));
countInfo.setVisibility(View.VISIBLE);
editParams.bottomMargin = DensityUtil.dip2px(getContext(), 20);
} else {
dialogIcon.setVisibility(View.VISIBLE);
send.setTextColor(Color.parseColor("#7e7e7e"));
countInfo.setVisibility(View.GONE);
editParams.bottomMargin = DensityUtil.dip2px(getContext(), 0);
}
if (comment.length() == 200) {
count.setTextColor(Color.parseColor("#FF5858"));
} else {
count.setTextColor(Color.parseColor("#ffffff"));
}
count.setText(comment.length() + "");
editText.setLayoutParams(editParams);
}
public interface OnCommonDialogFragmentListener {
void updateComment(String comment);
void publish();
void updateReply(String reply);
void reply();
}
public void setOnCommonDialogFragmentListener(OnCommonDialogFragmentListener listener) {
this.commonDialogFragmentListener = listener;
}
}
|