微信朋友圈点赞统计者本人看到的是他本名还是我给的备注名

Android 仿微信朋友圈点赞和评论弹出框功能
转载 & & 投稿:mrr
这篇文章主要介绍了Android 仿微信朋友圈点赞和评论弹出框功能的相关资料,非常不错,具有参考解决价值,需要的朋友可以参考下
贡献/下载源码:
本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框、发评论,及弹出位置的控制。
1. 微信弹出框
微信朋友圈的点赞和评论功能,有2个组成部分:
点击左下角的“更多”按钮,弹出对话框;
点击评论,弹出输入框,添加评论并在页面中实时显示;
微信朋友圈点赞和评论功能
2. 实际效果
本文将建一个 ListView,在其 Item 中简单模仿微信的布局,然后着重实现弹出窗,并能发评论,忽略具体布局细节。具体效果如下:
3. 知识点清单
自定义 Adapter,重写 getView()方法;
PopupWindow
弹出框使用PopupWindow实现,这是点赞和评论的载体,具体要涉及 PopupWindow 点击非窗口位置和再次点击消失以及显示位置的问题(根据相应更多按钮的位置确定 PopupWindow 的显示位置,关于 PopupWindow 的显示位置,可以参考我的另一篇文章 Android PopupWindow 的显示位置);
LayoutInflater
使用LayoutInflater 动态加载PopupWindow 的布局,关于 LayoutInflater 的更多知识,参见我的另一篇博客 Android LayoutInflater ;
Activity 和 Item 的双向通信
通过自定义 OnCommentListener() 来实现 MainActivity(具体来说是屏幕底部评论框中的输入的内容)和 ItemView(动态的获得上述输入的评论内容并展示在该ItemView 中) 的通信,更多知识参见我的另一篇博客《 燕过留声:由 Activity 和 Fragment 的通信方法想到的》;
自定义控件
ListView 中的每个 Item 是一个自定义的 ItemView,记得要重写构造方法,否则会抛出 Android.view.InflateException 异常;
如果想实现微信评论那样用户名和内容回复文字字体颜色不同,而且点击评论用户名触发页面跳转等功能,请参见 《布局优化技巧笔记》 之 ClickableSpan 章节;
4. 美工素材
由于 .apk 本质上是个压缩包,我们可以通过解压得到该 .apk 文件的图片素材和布局文件,更多获得素材的方法参见我的另一篇博文 如何获得Android素材图片。通过这种方式得到颜色、更多按钮的样式等素材,仅供学习之用,请勿做侵犯版权之事。尊重知识版权既是大势所趋,也是终将使每个开发者受益的事。
文件夹r里存放图片
找到更多按钮
5. 关键代码
开发环境:Android Studio 1.4.1 for Mac + ADT 21 + JDK 1.8.0。
MainAcitivity.Java
package main.zhaizu.com.
import android.content.C
import android.os.B
import android.support.v7.app.AppCompatA
import android.text.TextU
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.BaseA
import android.widget.EditT
import android.widget.ListV
import java.util.ArrayL
import java.util.HashM
import java.util.I
import java.util.M
import main.zhaizu.com.popupwindowdemo.model.C
import main.zhaizu.com.popupwindowdemo.model.I
import main.zhaizu.com.popupwindowdemo.ui.ItemV
public class MainActivity extends AppCompatActivity {
private ListView mListV
private View mCommentV
private MyAdapter myA
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listview);
myAdapter = new MyAdapter(this, getData());
mListView.setAdapter(myAdapter);
mCommentView = findViewById(R.id.comment_view);
// build data
private ArrayList&Item& getData() {
int ITEM_COUNT = 20;
ArrayList&Item& data = new ArrayList&&();
data.add(new Item(R.drawable.xiaona, "薄荷栗", "我学过跆拳道,都给我跪下唱征服", "昨天"));
data.add(new Item(R.drawable.xueyan, "欣然", "走遍天涯海角,唯有我家风景最好,啊哈哈", "昨天"));
data.add(new Item(R.drawable.leishao, "陈磊_CL", "老子以后要当行长的,都来找我借钱吧,now", "昨天"));
data.add(new Item(R.drawable.yuhong, "永恒依然", "房子车子都到碗里来", "昨天"));
data.add(new Item(R.drawable.lanshan, "蓝珊", "你们这群傻×,我笑而不语", "昨天"));
// custom adapter
private class MyAdapter extends BaseAdapter implements ItemView.OnCommentListener {
private ArrayList&Item& mD
private Map&Integer, ItemView& mCachedViews = new HashMap&&();
public MyAdapter(Context context, ArrayList&Item& mData) {
this.context =
this.mData = mD
public int getCount() {
return mData.size();
public Object getItem(int position) {
return mData.get(position);
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView != null) {
view = convertV
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.listview_item, null, false);
if (view instanceof ItemView) {
Item data = (Item) getItem(position);
((ItemView) view).setData(data);
((ItemView) view).setPosition(position);
((ItemView) view).setCommentListener(this);
cacheView(position, (ItemView) view);
public void onComment(int position) {
showCommentView(position);
private void cacheView(int position, ItemView view) {
Iterator&Map.Entry&Integer, ItemView&& entries = mCachedViews.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry&Integer, ItemView& entry = entries.next();
if (entry.getValue() == view && entry.getKey() != position) {
mCachedViews.remove(entry.getKey());
mCachedViews.put(position, view);
private void showCommentView(final int position) {
mCommentView.setVisibility(View.VISIBLE);
mCommentView.findViewById(R.id.submit).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
EditText et = (EditText) mCommentView.findViewById(R.id.edit);
String s = et.getText().toString();
if (!TextUtils.isEmpty(s)) {
// update model
Comment comment = new Comment(s);
mData.get(position).getComments().add(comment);
// update view maybe
ItemView itemView = mCachedViews.get(position);
if (itemView != null && position == itemView.getPosition()) {
itemView.addComment();
et.setText("");
mCommentView.setVisibility(View.GONE);
ItemView.java
package main.zhaizu.com.popupwindowdemo.
import android.content.C
import android.graphics.drawable.BitmapD
import android.graphics.drawable.ColorD
import android.util.AttributeS
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.ImageV
import android.widget.LinearL
import android.widget.PopupW
import android.widget.TextV
import main.zhaizu.com.popupwindowdemo.R;
import main.zhaizu.com.popupwindowdemo.model.C
import main.zhaizu.com.popupwindowdemo.model.I
* Created by cmm on 15/10/31.
public class ItemView extends LinearLayout implements View.OnClickListener {
private int mP
private Item mD
private ImageView mPortraitV
private TextView mUserNameV
private TextView mContentV
private TextView mCreatedAtV
private LinearLayout mCommentL
private View mMoreV
private PopupWindow mMorePopupW
private int mShowMorePopupWindowW
private int mShowMorePopupWindowH
private OnCommentListener mCommentL
public ItemView(Context context) {
super(context);
public ItemView(Context context, AttributeSet attrs) {
super(context, attrs);
public interface OnCommentListener {
void onComment(int position);
protected void onFinishInflate() {
super.onFinishInflate();
mPortraitView = (ImageView) findViewById(R.id.portrait);
mUserNameView = (TextView) findViewById(R.id.nick_name);
mContentView = (TextView) findViewById(R.id.content);
mCreatedAtView = (TextView) findViewById(R.id.created_at);
mCommentLayout = (LinearLayout) findViewById(R.id.comment_layout);
mMoreView = findViewById(R.id.more_btn);
public void setPosition(int mPosition) {
this.mPosition = mP
public void setCommentListener(OnCommentListener l) {
this.mCommentListener =
public void setData(Item data) {
mPortraitView.setImageResource(data.getPortraitId());
mUserNameView.setText(data.getNickName());
mContentView.setText(data.getContent());
updateComment();
mMoreView.setOnClickListener(this);
* 弹出点赞和评论框
* @param moreBtnView
private void showMore(View moreBtnView) {
if (mMorePopupWindow == null) {
LayoutInflater li = (LayoutInflater) getContext().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);
// 点赞的监听器
comment.setOnClickListener(this);
if (mMorePopupWindow.isShowing()) {
mMorePopupWindow.dismiss();
int heightMoreBtnView = moreBtnView.getHeight();
mMorePopupWindow.showAsDropDown(moreBtnView, -mShowMorePopupWindowWidth,
-(mShowMorePopupWindowHeight + heightMoreBtnView) / 2);
private void updateComment() {
if (mData.hasComment()) {
mCommentLayout.removeAllViews();
mCommentLayout.setVisibility(View.VISIBLE);
for (Comment c : mData.getComments()) {
TextView t = new TextView(getContext());
t.setLayoutParams(new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)));
t.setBackgroundColor(getResources().getColor(R.color.colorCommentLayoutBg));
t.setTextSize(16);
t.setPadding(5, 2, 0, 3);
t.setLineSpacing(3, (float) 1.5);
t.setText(c.getComment());
mCommentLayout.addView(t);
mCommentLayout.setVisibility(View.GONE);
public void onClick(View v) {
int id = v.getId();
if (id == R.id.more_btn) {
showMore(v);
} else if (id == R.id.comment) {
if (mCommentListener != null) {
mCommentListener.onComment(mPosition);
if (mMorePopupWindow != null && mMorePopupWindow.isShowing()) {
mMorePopupWindow.dismiss();
public int getPosition() {
public void addComment() {
updateComment();
以上所述是小编给大家介绍的Android 仿微信朋友圈点赞和评论弹出框功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具专业的QQ下载站 本站非腾讯QQ官方网站
本类阅读排行
12345微信电脑客户端官方下载 微信电脑能用吗?678910
热点图文新闻
朋友圈明星点赞评论什么软件 2016朋友圈装逼神器玩法详解
导读:当你看到微信好友在晒明星给他点赞或评论朋友圈的说说时,你就知道,新的一轮装逼模式已开启。没错!有一款名为朋友圈装逼神器的APP,下载后,即可开启装逼模式!选择自己喜欢的明星、模板,你就可以自定义你喜欢明星@你的微信说说,并在朋友圈中跟你互动,将这互动的朋友圈说说截图保存后,即可开启装逼模式。
当你看到好友在晒明星给他点赞或评论朋友圈的说说时,你就知道,新的一轮装逼模式已开启。没错!有一款名为朋友圈装逼神器的APP,下载后,即可开启装逼模式!选择自己喜欢的明星、模板,你就可以自定义你喜欢明星@你的微信说说,并在朋友圈中跟你互动,将这互动的朋友圈说说截图保存后,即可开启装逼模式。微信朋友圈如何让明星点赞或评论?
应用名称:
朋友圈神器手机版appv1.43 安卓版
下载地址:
1.首先需要下载安装好朋友圈神器app,小伙伴们可在小编给出的安卓应用下载地址中直接下载安装, 安装好以后打开应用,就会出现这个界面,如图:2.那么就可以开始设计啦!先选择一个自己喜欢的模板,小编提前试验,模板类型蛮多的,有李易峰、志玲姐姐、钟汉良、鹿晗、艺兴等可选择3.选择好直接点击就会生成以下界面,小编选了鹿晗傻狍子~然后点击预览看看效果4.预览效果不错,如果没有需要改动的地方就可以点击“保存”按钮了5.点击“保存”按钮后,有两种保存方式,第一种是保存到手机相册里,第二种是直接发布朋友圈,选择自己喜欢的方式,那么设计就完成了6.另外朋友圈神器还有个‘朋友圈社区’,小伙伴们感兴趣的话也可以进去看看7.朋友圈社区里有别的小伙伴的晒图~你想知道更多的朋友圈装逼玩法?那就来看看本站提供的最新资源吧!让你成为时尚装逼小能手哦!朋友圈离婚证书生成器玩法:朋友圈房产证生成器玩法:楼宇表白图片生成器玩法:朋友圈无人驾驶员合格证玩法:朋友圈法拉利配置单生成玩法:
出处: 作者:qqtn强柔
阅读本文后您有什么感想? 已有 0 人给出评价!  如题,我把一个已经做不成朋友的人,屏蔽了,对方也把我屏蔽了,说实话我并不在乎,之间有许多相关的朋友,但是为什么我还能看得到对方在其他朋友的点赞和评论? 这是为什么?   这样的话,屏蔽是不是分两种:一种完全看不到对方任何动态的,比如他的更新,点赞评论 二个就是 看不到其朋友圈及其更新,但能看到对方给其他朋友点赞,评论 ,求大神解答
楼主发言:2次 发图:0张 | 更多
  ?  
  我和我以前一同事就这样,某天发现他屏蔽了我,我也就屏蔽了他,消息可以互发,可是彼此朋友圈什么都看不见的。  
  微信就是这样的 这就是屏蔽后的样子了
A屏蔽了B 他们有共同好友C B在C下面留言A都可以看得到
  干嘛不直接删了呀  
  对没必要继续相处的直接删掉就好,用不着跟她客气,留着恶心自己吗
<span class="count" title="万
<span class="count" title="万
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)202被浏览41,381分享邀请回答787 条评论分享收藏感谢收起61 条评论分享收藏感谢收起&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
微信朋友圈点赞潮流的反思
下载积分:1500
内容提示:微信朋友圈点赞潮流的反思
文档格式:PDF|
浏览次数:48|
上传日期: 18:06:16|
文档星级:&#xe60b;&#xe60b;&#xe60b;&#xe60b;&#xe60b;
全文阅读已结束,如果下载本文需要使用
&#xe71b; 1500 积分
&#xe602;下载此文档
该用户还上传了这些文档
微信朋友圈点赞潮流的反思
关注微信公众号

我要回帖

更多关于 微信朋友圈点赞生成器 的文章

 

随机推荐