Android 评论输入框弹窗+软键盘自动弹起

您所在的位置:网站首页 弹窗自动点击软件 Android 评论输入框弹窗+软键盘自动弹起

Android 评论输入框弹窗+软键盘自动弹起

#Android 评论输入框弹窗+软键盘自动弹起| 来源: 网络整理| 查看: 265

需求是输入框和软键盘一起弹出,效果图如下: 在这里插入图片描述

可以使用Dialog 的形式,因为Dialog中如果有输入框的话在弹出软键盘后会将弹窗顶起,这样就实现了这个效果: 本次使用DialogFragment 可以方便管理Dialog的生命周期

代码如下:

public class InputDialogForFeedBack extends DialogFragment { private Dialog dialog; private EditText editText; private View contentView; private Handler handler = new Handler(); private IInputFinishCallback callback; private TextView cancel; private TextView submit; private TextView textNumber; public interface IInputFinishCallback{ void sendStr(String inputStr); } public InputDialogForFeedBack(IInputFinishCallback callback) { this.callback = callback; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { dialog = new Dialog(getActivity(),R.style.Dialog_NoTitle); initView(); setDialgParms(); initEvent(); return dialog; } private void initEvent() { submit.setOnClickListener(v -> { String trim = editText.getText().toString().trim(); if (!TextUtils.isEmpty(trim) && trim.length() ToastUtils.showSmallCenter("输入为空"); } }); cancel.setOnClickListener(v -> { dialog.dismiss(); }); editText.addTextChangedListener(new TextWatcher() { @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) { String s1 = s.toString(); if (!TextUtils.isEmpty(s1)){ if (s1.length() > 200){ ToastUtils.showSmallCenter("不能超过200个字符"); return; } textNumber.setText(s1.length()+"/200"); } } }); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { public InputMethodManager mInputMethodManager; @Override public void onDismiss(DialogInterface dialog) { handler.postDelayed(new Runnable() { @Override public void run() { hideSoftkeyboard(); } }, 200); } }); } private void setDialgParms() { Window window = dialog.getWindow(); WindowManager.LayoutParams wml = window.getAttributes(); DisplayMetrics dm = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); wml.width = dm.widthPixels; wml.gravity = Gravity.BOTTOM; window.setAttributes(wml); editText.setFocusable(true); editText.setFocusableInTouchMode(true); } private void initView() { contentView = LayoutInflater.from(getContext()).inflate(R.layout.input_feed_back_dialog_layout,null); editText = contentView.findViewById(R.id.dialog_input_et); cancel = contentView.findViewById(R.id.dialog_cancel_tv); submit = contentView.findViewById(R.id.dialog_submit_tv); textNumber = contentView.findViewById(R.id.dialog_text_number_tv); dialog.setContentView(contentView); } public static void showKeyboard(View view) { InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { view.requestFocus(); imm.showSoftInput(view, 0); } } public void hideSoftkeyboard() { try { ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } catch (NullPointerException e) { } } @Override public void onResume() { super.onResume(); handler.postDelayed(new Runnable() { @Override public void run() { showKeyboard(editText); } },300); } @Override public void onDestroy() { super.onDestroy(); if (dialog != null){ dialog.dismiss(); dialog = null; } if (callback != null){ callback = null; } if (handler != null){ handler.removeCallbacksAndMessages(null); handler = null; } } }

使用的话很简单

InputDialogForFeedBack dialog = new InputDialogForFeedBack(new InputDialogForFeedBack.IInputFinishCallback() { @Override public void sendStr(String inputStr) { //TODO 提交反馈信息 } }); dialog.showNow(fragmentManager,"input");

附:弹窗的样式代码

true true @android:color/transparent true @style/AnimationPicker


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3