欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android仿微信实现评论功能

程序员文章站 2022-05-27 10:08:27
在最近做的项目中有碰到要写类似朋友圈的模块,因为要实现评论点赞功能,这里说下我是怎么实现评论功能的。 首先先放上效果图   这里贴上我...

在最近做的项目中有碰到要写类似朋友圈的模块,因为要实现评论点赞功能,这里说下我是怎么实现评论功能的。

首先先放上效果图  

Android仿微信实现评论功能

这里贴上我的代码:

//给评论图标设置点击事件
 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包裹住,发现这样子评论框就会和软键盘一起弹出来了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。