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.util.Log; 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 { private static final String TAG = "CommonDialogFragment"; private static final String ARG_COMMENT = "comment"; private Dialog dialogFragment; private EditText editText; private TextView send; public OnCommonDialogFragmentListener commonDialogFragmentListener; private ImageView dialogIcon; private ConstraintLayout countInfo; private TextView count; public static CommonDialogFragment newInstance(String comment) { CommonDialogFragment dialogFragment = new CommonDialogFragment(); Bundle args = new Bundle(); args.putString(ARG_COMMENT, comment); dialogFragment.setArguments(args); return dialogFragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final String comment = getArguments().getString(ARG_COMMENT); 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()); updateView(comment); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (commonDialogFragmentListener != null && editText.getText().toString().trim().length() > 0) { dismiss(); commonDialogFragmentListener.publish(); } } }); 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) { commonDialogFragmentListener.updateComment(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(); } public void setOnCommonDialogFragmentListener(OnCommonDialogFragmentListener listener) { this.commonDialogFragmentListener = listener; } }