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包裹住,发现这样子评论框就会和软键盘一起弹出来了。

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

(0)

相关推荐

  • Android仿微信朋友圈点赞和评论功能

    最近在做朋友圈的项目,所以写一个Android仿朋友圈点赞和评论功能Demo,代码就是简单实现了一下功能,没有做优化,凑合看 图文排列是用的RecyclerView实现的,弹窗效果是用的自定义的PopupWindow,点赞应该是在本地请求数据库,设置一个flag,获取当前用户的id后,带着id向服务器post一个flag,评论就比较简单了,也是获取当前朋友id(或者昵称),带着内容,向服务器post 贴代码: package com.example.lenovo.dianzandemo; imp

  • Android 仿微信朋友圈点赞和评论弹出框功能

    贡献/下载源码:https://github.com/mmlovesyy/PopupWindowDemo 本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框.发评论,及弹出位置的控制. 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 点击左下角的"更多"按钮,弹出对话框: 点击评论,弹出输入框,添加评论并在页面中实时显示: 微信朋友圈点赞和评论功能 2. 实际效果 本文将建一个 ListView,在其 Item 中简单模仿微信的布局,然后着重实现

  • Android中使用PopupWindow 仿微信点赞和评论弹出

    微信朋友圈的点赞和评论功能,有2个组成部分:左下角的"更多"按钮:点击该按钮后弹出的对话框: PopupWindow,弹出框使用PopupWindow实现,这是点赞和评论的载体,具体要涉及 PopupWindow 点击非窗口位置和再次点击消失以及显示位置的问题(根据相应更多按钮的位置确定 PopupWindow 的显示位置 package com.example.cmm.helloworld; import android.app.AlertDialog; import android

  • Android实现微信朋友圈评论EditText效果

    本文主要讲解实现微信朋友圈评论EditText效果思路,供大家参考,具体内容如下 效果图 当我们点击某一天朋友圈的评论是,列表也会跟随着滑动,使得键盘刚好在我们点击的那条评论上方 getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout(

  • Android仿微信朋友圈点击评论自动定位到相关行功能

    最近闲来无事,随便看看各种UI实现的代码 本文涉及到的相关代码已经上传到 https://github.com/r17171709/android_demo/tree/master/WeixinEditText 打开你的微信朋友圈,点击评论,你就会发现有一个小细节:文本输入框的高度恰好定位到这条信息的底部位置 这个实现起来其实很简单,咱们就来看看吧 最简单的RecyclerView 依然是先实现RecyclerView.跟朋友圈一样,我们也把头给加上去,这样我们在点第一条信息的时候,效果会更好一

  • Android仿微信实现评论功能

    在最近做的项目中有碰到要写类似朋友圈的模块,因为要实现评论点赞功能,这里说下我是怎么实现评论功能的. 首先先放上效果图 这里贴上我的代码: //给评论图标设置点击事件 mIv_header_discuss.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showPopupcomment(); } }); showPopupcomment()方法如下 private Po

  • Android仿微信语音聊天功能

    本文实例讲述了Android仿微信语音聊天功能代码.分享给大家供大家参考.具体如下: 项目效果如下: 具体代码如下: AudioManager.java package com.xuliugen.weichat; import java.io.File; import java.io.IOException; import java.util.UUID; import android.media.MediaRecorder; public class AudioManager { private

  • android 仿微信demo——登录功能实现(移动端)

    移动端登录功能实现 登录功能基本和注册一样,唯一不同的是登录可以实现两种登录方式(微信号和手机号),也就是布局不一样.所以需要两个布局,两个activity(这个方法比较简单粗暴,我懒.也可以通过activity动态切换布局,这样只需要一个activity就可以了) 创建两个activity,实现两种登录方式 微信号登录activity LoginUser.java package com.example.wxchatdemo; import android.annotation.Suppres

  • android仿微信好友列表功能

    android studio实现微信好友列表功能,注意有一个jar包我没有放上来,请大家到MainActivity中的那个网址里面下载即可,然后把pinyin4j-2.5.0.jar复制粘贴到项目的app/libs文件夹里面,然后clean项目就可以使用了 实现效果图: (1)在build.gradle中引用第三方的类库 compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile files('libs/pinyin4j

  • Android仿微信录制语音功能

    本文实例为大家分享了Android仿微信录制语音的具体代码,供大家参考,具体内容如下 前言 我把录音分成了两部分 1.UI界面,弹窗读秒 2.一个类(包含开始.停止.创建文件名功能) 第一部分 由于6.0权限问题,点击按钮申请权限通过则弹窗,如何申请权限 弹窗布局popw_record.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:

  • Android仿微信底部菜单栏功能显示未读消息数量

    底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏,这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出来方便以后使用). 先看一下做出来之后的效果: 以后使用的时候就可以换成自己项目的图片和字体了,主框架不用变哈哈, 首先是要布局layout下xml文件 main.xml: <?xml version="1.0" encoding=&qu

  • android 仿微信demo——注册功能实现(移动端)

    移动端注册功能实现 微信的注册界面每一个文本段都有下划线且默认颜色都是灰色,当其中一个文本段获取焦点会将下划线的颜色变为绿色,而且文本输入框的光标也是绿色的,还有在文本输入框没有全部输入的情况下,按钮是不能点击的,只有当文本输入框全部输入的情况下才能点击且此时按钮会变成绿色.除了这些UI功能外,当点击注册按钮是还会把表单数据发送给服务器 创建activity Reigister.java activity Reigister.java package com.example.wxchatdemo

  • android 仿微信demo——注册功能实现(服务端)

    服务端注册功能实现 通过web层完成客户端和服务端的数据交互(接受数据,发送数据),service层完成业务逻辑(注册,登录),dao层操作数据库(要借助工具类) 创建项目 idea创建服务端项目 配置tomcat服务器 启动项目测试服务器 创建web层和客户端完成数据交互 创建Servlet Reigister.java Reigister.java package com.example.controller; import com.alibaba.fastjson.JSON; import

  • android 仿微信demo——登录功能实现(服务端)

    上一篇文章实现了微信登录的移动端功能,下面继续完善功能,实现微信登录服务端功能 服务端登录功能实现 在以往文章里已经实现了服务端mvc框架,而登录和注册是类似,所以只需要在web层创建一个Servlet用于和客户端完成数据交互且在service层和dao层中在相应的接口添加相应的抽象方法,然后再实现类中重写就好了. 创建Servlet Login.java,实现服务端和客户端的数据交互 Login.java package com.example.controller; import com.a

  • Android仿微信长按菜单效果

    本文实例为大家分享了Android仿微信长按菜单展示的具体代码,供大家参考,具体内容如下 FloatMenu A menu style pop-up window that mimics WeChat.仿微信的长按菜单. 效果如下 引入方法: Github地址:https://github.com/JavaNoober/FloatMenu dependencies { .... compile 'com.noober.floatmenu:common:1.0.2' } 使用说明 使用方法1: A

随机推荐