热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

微信朋友圈的点赞和评论功能,有2个组成部分:左下角的“更多”按钮;点击该按钮后弹出的对话框。这篇文章主要介绍了Android中使用PopupWindow仿微信点赞和评论弹出,需要的朋友可以参考下

微信朋友圈的点赞和评论功能,有2个组成部分:左下角的“更多”按钮;点击该按钮后弹出的对话框;

PopupWindow,弹出框使用PopupWindow实现,这是点赞和评论的载体,具体要涉及 PopupWindow 点击非窗口位置和再次点击消失以及显示位置的问题(根据相应更多按钮的位置确定 PopupWindow 的显示位置

package com.example.cmm.helloworld;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
 private PopupWindow mMorePopupWindow;
 private int mShowMorePopupWindowWidth;
 private int mShowMorePopupWindowHeight;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ListView lv = (ListView) findViewById(R.id.listview);
  lv.setAdapter(new MyAdapter(MainActivity.this, getData()));
 }
 private List getData() {
  List data = new ArrayList<>();
  data.add(new Data(R.drawable.xiaona, "薄荷栗", "我学过跆拳道,都给我跪下唱征服", "昨天"));
  data.add(new Data(R.drawable.xueyan, "欣然", "走遍天涯海角,唯有我家风景最好,啊哈哈", "昨天"));
  data.add(new Data(R.drawable.leishao, "陈磊_CL", "老子以后要当行长的,都来找我借钱吧,now", "昨天"));
  data.add(new Data(R.drawable.yuhong, "永恒依然", "房子车子都到碗里来", "昨天"));
  data.add(new Data(R.drawable.lanshan, "蓝珊", "你们这群傻×,我笑而不语", "昨天"));
  return data;
 }
 class MyAdapter extends BaseAdapter {
  private List listdata;
  private Context context;
  public MyAdapter(Context context, List listdata) {
   this.cOntext= context;
   this.listdata = listdata;
  }
  @Override
  public int getCount() {
   return listdata.size();
  }
  @Override
  public Object getItem(int arg0) {
   return listdata.get(arg0);
  }
  @Override
  public long getItemId(int arg0) {
   return arg0;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   cOnvertView= inflater.inflate(R.layout.listview_item, null, false);
   // 带赋值区域
   ImageView ivPortrait = (ImageView) convertView.findViewById(R.id.portrait);
   TextView tvNickName = (TextView) convertView.findViewById(R.id.nick_name);
   TextView tvCOntent= (TextView) convertView.findViewById(R.id.content);
   TextView tvCreatedAt = (TextView) convertView.findViewById(R.id.created_at);
   ImageView moreBtn = (ImageView) convertView.findViewById(R.id.more_btn);
   // 赋值
   Data data = listdata.get(position);
   ivPortrait.setImageResource(data.getPortraitId());
   tvNickName.setText(data.getNickName());
   tvContent.setText(data.getContent());
   tvCreatedAt.setText(data.getCreatedAt());
   // 更多按钮的点击事件
   moreBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     showMore(v);
    }
   });
   return convertView;
  }
  /**
   * 弹出点赞和评论框
   *
   * @param moreBtnView
   */
  private void showMore(View moreBtnView) {
   if (mMorePopupWindow == null) {
    LayoutInflater li = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View cOntent= li.inflate(R.layout.layout_more, null, false);
    mMorePopupWindow = new PopupWindow(content, ViewGroup.LayoutParams.WRAP_CONTENT,
      ViewGroup.LayoutParams.WRAP_CONTENT);
    mMorePopupWindow.setBackgroundDrawable(new BitmapDrawable());
    mMorePopupWindow.setOutsideTouchable(true);
    mMorePopupWindow.setTouchable(true);
    content.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
    mShowMorePopupWindowWidth = content.getMeasuredWidth();
    mShowMorePopupWindowHeight = content.getMeasuredHeight();
    View parent = mMorePopupWindow.getContentView();
    TextView like = (TextView) parent.findViewById(R.id.like);
    TextView comment = (TextView) parent.findViewById(R.id.comment);
    // 点赞的监听器
    like.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
      alert.setTitle("点赞");
      alert.setNegativeButton("取消", null);
      alert.show();
     }
    });
    // 评论的监听器
    comment.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
      alert.setTitle("评论");
      alert.setNegativeButton("取消", null);
      alert.show();
     }
    });
   }
   if (mMorePopupWindow.isShowing()) {
    mMorePopupWindow.dismiss();
   } else {
    int heightMoreBtnView = moreBtnView.getHeight();
    mMorePopupWindow.showAsDropDown(moreBtnView, -mShowMorePopupWindowWidth,
      -(mShowMorePopupWindowHeight + heightMoreBtnView) / 2);
   }
  }
 }
 class Data {
  private int portraitId; // 头像
  private String nickName; // 昵称
  private String content; // 说说
  private String createdAt; // 发布时间
  public Data(int portraitId, String nickName, String content, String createdAt) {
   this.portraitId = portraitId;
   this.nickName = nickName;
   this.cOntent= content;
   this.createdAt = createdAt;
  }
  public int getPortraitId() {
   return portraitId;
  }
  public String getNickName() {
   return nickName;
  }
  public String getContent() {
   return content;
  }
  public String getCreatedAt() {
   return createdAt;
  }
 }
}

以上所述是小编给大家介绍的Android中使用PopupWindow 仿微信点赞和评论弹出,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文讨论了同事工资打听的话题,包括同工不同酬现象、打探工资的途径、为什么打听别人的工资、职业的本质、商业价值与工资的关系,以及如何面对同事工资比自己高的情况和凸显自己的商业价值。故事中的阿巧发现同事的工资比自己高后感到不满,通过与老公、闺蜜交流和搜索相关关键词来寻求解决办法。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 如何在文本中运行Java程序
    本文介绍了在文本中运行Java程序的步骤,包括创建文本文档、修改后缀、打开DOS命令窗口、编译和运行程序。通过这些步骤,可以在文本中成功运行Java程序并输出结果。 ... [详细]
author-avatar
cc_lzx_530
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有