简单实现回复功能

来源:互联网 发布:苏州团扇李晶淘宝店 编辑:程序博客网 时间:2024/05/17 03:56

最近一个月都在超强度的加班中,博客都没时间维护了,搬了一个月砖也没有什么长进,不过有个评论回复的需求还是可以动脑子的。就跟qq空间的回复框弹出的效果差不多。

简单分析
为了做出这个效果,我把qq空间的回复效果仔细分析了一遍。首先他的输入框是跟随系统键盘一起弹出和收回的,如果不做回复操作,直接隐藏系统键盘的话输入框会停留在屏幕底部,触摸屏幕的任何位置输入框都会消失,不难看出他是在点击回复的时候,弹出一个Dialog,Dialog中添加了一个自定义布局;如果做回复操作后就键盘会自动收回,输入框也会跟着键盘的动画消失;就这么简单的实现了随键盘弹出和收回的动画。

核心代码

protected Dialog onCreateDialog() {        final Dialog mDialog = new Dialog(context);        //加载自定义布局        View mView = View.inflate(context,R.layout.dialog_comment, null);        final EditText edt_reply = (EditText) mView.findViewById(R.id.edt_comments);        Button btn_reply = (Button) mView.findViewById(R.id.btn_send);        edt_reply.setFocusable(true);       mDialog .requestWindowFeature(Window.FEATURE_NO_TITLE);        mDialog .getWindow().setGravity(Gravity.BOTTOM);        mDialog .setContentView(mView);        ColorDrawable cd = new ColorDrawable(0x000000);        mDialog .getWindow().setBackgroundDrawable(cd);        //弹出系统键盘        TDevice.showSoftKeyboard(mDialog);        mDialog .show();        btn_reply.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {            //回复操作        });        mDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {            @Override            public void onDismiss(DialogInterface dialog) {                TDevice.hideSoftKeyboard(edt_reply);            }        });        return mDialog ;    }

以上代码中:
- requestWindowFeature(Window.FEATURE_NO_TITLE) 去除Dialog的标题
- setGravity(Gravity.BOTTOM) 设置初始位置在屏幕底部,当键盘弹出时刚好把输入框顶上去。
- TDevice.showSoftKeyboard(mDialog); TDevice一个弹键盘的工具类,这行代码必须放在mDialog .show();之前,具体代码如下。

   public static void showSoftKeyboard(Dialog dialog) {        dialog.getWindow().setSoftInputMode(4);    }

隐藏软键盘

 public static void hideSoftKeyboard(View view) {        if (view == null)            return;        View focusView = null;        if (view instanceof EditText)            focusView = view;        Context context = view.getContext();        if (context != null && context instanceof Activity) {            Activity activity = ((Activity) context);            focusView = activity.getCurrentFocus();        }        if (focusView != null) {            if (focusView.isFocused()) {                focusView.clearFocus();            }            InputMethodManager manager = (InputMethodManager) focusView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);            manager.hideSoftInputFromWindow(focusView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);            manager.hideSoftInputFromInputMethod(focusView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);        }    }

基本上思路就这样,效果图自己想象吧

0 0
原创粉丝点击