简单实现回复功能

最近一个月都在超强度的加班中,博客都没时间维护了,搬了一个月砖也没有什么长进,不过有个评论回复的需求还是可以动脑子的。就跟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);
        }
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值