Android仿微信实现评论功能
程序员文章站
2022-05-27 10:08:27
在最近做的项目中有碰到要写类似朋友圈的模块,因为要实现评论点赞功能,这里说下我是怎么实现评论功能的。
首先先放上效果图
这里贴上我...
在最近做的项目中有碰到要写类似朋友圈的模块,因为要实现评论点赞功能,这里说下我是怎么实现评论功能的。
首先先放上效果图
这里贴上我的代码:
//给评论图标设置点击事件 miv_header_discuss.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { showpopupcomment(); } });
showpopupcomment()方法如下
private popupwindow popupwindow; private view popupview = null; private edittext inputcomment; private string ninputcontenttext; private textview btn_submit; private relativelayout rl_input_container; private inputmethodmanager minputmanager; @suppresslint("wrongconstant") private void showpopupcomment() { if (popupview == null){ //加载评论框的资源文件 popupview = layoutinflater.from(context).inflate(r.layout.comment_popupwindow, null); } inputcomment = (edittext) popupview.findviewbyid(r.id.et_discuss); btn_submit = (button) popupview.findviewbyid(r.id.btn_confirm); rl_input_container = (relativelayout)popupview.findviewbyid(r.id.rl_input_container); //利用timer这个api设置延迟显示软键盘,这里时间为200毫秒 timer timer = new timer(); timer.schedule(new timertask() { public void run() { minputmanager = (inputmethodmanager)getactivity().getsystemservice(context.input_method_service); minputmanager.showsoftinput(inputcomment, 0); } }, 200); if (popupwindow == null){ popupwindow = new popupwindow(popupview, relativelayout.layoutparams.match_parent, relativelayout.layoutparams.wrap_content, false); } //popupwindow的常规设置,设置点击外部事件,背景色 popupwindow.settouchable(true); popupwindow.setfocusable(true); popupwindow.setoutsidetouchable(true); popupwindow.setbackgrounddrawable(new colordrawable(0x00000000)); popupwindow.settouchinterceptor(new view.ontouchlistener() { @override public boolean ontouch(view v, motionevent event) { if (event.getaction() == motionevent.action_outside) popupwindow.dismiss(); return false; } }); // 设置弹出窗体需要软键盘,放在setsoftinputmode之前 popupwindow.setsoftinputmode(popupwindow.input_method_needed); // 再设置模式,和activity的一样,覆盖,调整大小。 popupwindow.setsoftinputmode(windowmanager.layoutparams.soft_input_adjust_resize); //设置popupwindow的显示位置,这里应该是显示在底部,即bottom popupwindow.showatlocation(popupview, gravity.bottom, 0, 0); popupwindow.update(); //设置监听 popupwindow.setondismisslistener(new popupwindow.ondismisslistener() { // 在dismiss中恢复透明度 @requiresapi(api = build.version_codes.cupcake) public void ondismiss() { minputmanager.hidesoftinputfromwindow(inputcomment.getwindowtoken(), 0); //强制隐藏键盘 } }); //外部点击事件 rl_input_container.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { minputmanager.hidesoftinputfromwindow(inputcomment.getwindowtoken(), 0); //强制隐藏键盘 popupwindow.dismiss(); } }); //评论框内的发送按钮设置点击事件 btn_submit.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { ninputcontenttext = inputcomment.gettext().tostring().trim(); if (ninputcontenttext == null || "".equals(ninputcontenttext)) { showtoastmsgshort("请输入评论内容"); return; } minputmanager.hidesoftinputfromwindow(inputcomment.getwindowtoken(),0); popupwindow.dismiss(); } }); }
在刚开始显示的时候发现,edittext即评论框被顶到屏幕最上方,然而键盘显示在底部,达不到效果。很多文章都说
popupwindow.setsoftinputmode(popupwindow.input_method_needed); popupwindow.setsoftinputmode(windowmanager.layoutparams.soft_input_adjust_resize);
这两句代码顺序不能变,然而这样写了之后还是实现不了,自己摸索了半天发现出现这样的问题与评论框的布局也有关系。
所以在这里贴上我的评论框布局
r.layout.comment_popupwindow
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_input_container" android:layout_width="match_parent" android:layout_height="match_parent"> <linearlayout android:layout_width="match_parent" android:layout_height="44dp" android:background="@color/colorwhite" android:layout_alignparentbottom="true" android:orientation="horizontal"> <edittext android:id="@+id/et_discuss" android:layout_width="0dp" android:layout_weight="1" android:layout_height="38dp" android:textcolorhint="#a2a2a2" android:textsize="13sp" android:layout_marginright="7dp" android:layout_marginleft="15dp" android:layout_marginbottom="6dp" android:layout_margintop="6dp" android:ellipsize="end" android:background="@drawable/round_edittext_input" android:layout_gravity="center_vertical" android:paddingleft="@dimen/ten_padding" android:paddingright="@dimen/ten_padding" android:singleline="true" /> <button android:id="@+id/btn_confirm" android:text="发送" android:background="@drawable/btn_discuss_bg" android:textsize="16sp" android:layout_gravity="center_vertical" android:textcolorhint="#b7b7b7" android:textcolor="@color/colorwhite" android:layout_marginright="@dimen/ten_padding" android:gravity="center" android:layout_width="40dp" android:layout_height="38dp"/> </linearlayout> </relativelayout>
把评论框和发送按钮用linearlayout包裹,然后在最外层用一个relativelayout包裹住,发现这样子评论框就会和软键盘一起弹出来了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。