文章      动态     相关文章     最新文章     手机版动态     相关动态     |   首页|会员中心|保存桌面|手机浏览

w68au

http://g8akg8.riyuangf.com/comw68au/

相关列表
文章列表
  • 暂无文章
推荐文章
联系方式
  • 联系人:赵先生
Android仿手机QQ空间动态评论,自动定位到输入框
发布时间:2024-11-19        浏览次数:0        返回列表

手机QQ空间浏览好友动态时,可以直接对动态评论,点击某条评论,动态列表自动滚动,使输入框刚好在该评论下面,而不会覆盖住评论内容。如下图所示

Android仿手机QQ空间动态评论,自动定位到输入框

Android仿手机QQ空间动态评论,自动定位到输入框

首先要实现输入框刚好在输入面板上面,且动态列表不会被挤上去。可以使用对话框的形式,这样输入框不会影响原有的布局,弹出的对话框布局如下所示,点击EditText时,红色块的内容将位于输入法上面。在这里我把ScrollerView的背景设为透明。其实QQ空间的输入框也是以对话框的形式弹出,因为弹出对话框时,原本全屏的布局突然多了一条状态栏。

Android仿手机QQ空间动态评论,自动定位到输入框
接着就是要让点击的评论刚好在评论输入框上面,可以使用ListView.smoothScrollBy(distance, duration)让列表滚动到相应位置,但是难点是如何计算出滚动的距离distance。

如下图所示,我们主要计算弹出输入面板后的输入框和评论之间的距离(绿色线条的长度)。通过View.getLocationOnScreen()方法可以计算出view在屏幕上的坐标(x,y),那么列表滑动的距离distance = listview的y坐标 - 输入框的y坐标。

 
 

最后要弄的就是评论中,评论者、接收者和评论内容用不同的颜色显示,且点击时有点击效果。这里可以通过下面的代码实现

 

自定义标签,通过自定义的标签解析类Html.TagHandler来响应不同标签的操作。这里我自定义了commentator、receiver、content标签,列入一条评论的字符串形式为“<commentator>用户1</commentator> 回复 <receiver>用户2</receiver>:<content>评论内容</content>”,点击content标签时对该评论的评论者进行回复。

 
 

在ListView中,因为Item里面的子View使用了ClickableSpan,导致ListView的OnItemClickListener失效,解决的方法可以在getView中加入下列代码,阻止ListView里面的子View拦截焦点。

 

设置点击的文字背景色

 
 

难点都已经解决了,最后实现的效果如下

Android仿手机QQ空间动态评论,自动定位到输入框

完整demo:https://github.com/1993hzw/QZoneComment

由于本人的毕业论文的题目为基于android的QQ空间模拟系统,所以对android版的QQ空间研究了不少,山寨了其核心功能。之后有机会继续跟大家分享经验,谢谢支持。