版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android如何实现仿微信朋友圈点击评论自动定位到相关行功能
这篇文章主要介绍了Android如何实现仿微信朋友圈点击评论自动定位到相关行功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让在下带着大家一起了解一下。打开你的微信朋友圈,点击评论,你就会发现有一个小细节:文本输入框的高度恰好定位到这条信息的底部位置这个实现起来其实很简单,咱们就来看看吧最简单的RecyclerView依然是先实现RecyclerView。跟朋友圈一样,我们也把头给加上去,这样我们在点第一条信息的时候,效果会更好一些信息内容简单些,反正我们就看看效果<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
/>
<TextView
android:id="@+id/tv_comment"
android:text="评论"
android:textSize="14sp"
android:layout_margin="5dip"
android:textColor="@color/colorAccent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>头部也很简单,就一张图片作为区分<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="300dip">
<ImageView
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
</RelativeLayout>消息内容就以string作为信息数据类型,头的数据类型为TopClassdata
class
TopClass(val
value:
String)实现一个adapterclass
MainAdapter(private
val
beans:
ArrayList<Any>,
val
context:
Context)
:
RecyclerView.Adapter<RecyclerView.ViewHolder>()
{
var
height
=
0
enum
class
TYPE(val
value:
Int)
{
TOP(0),
NORMAL(1)
}
override
fun
onCreateViewHolder(parent:
ViewGroup?,
viewType:
Int):
RecyclerView.ViewHolder
{
when(viewType)
{
TYPE.NORMAL.value
->
{
val
view
=
LayoutInflater.from(context).inflate(R.layout.adapter_main,
parent,
false)
return
MainNormalViewHolder(view)
}
TYPE.TOP.value
->
{
val
view
=
LayoutInflater.from(context).inflate(R.layout.adapter_top,
parent,
false)
return
MainTopViewHolder(view)
}
}
throw
Exception()
}
override
fun
getItemCount()
=
beans.size
override
fun
onBindViewHolder(holder:
RecyclerView.ViewHolder?,
position:
Int)
{
if
(holder
!=
null)
{
when(getItemViewType(position))
{
TYPE.NORMAL.value
->
{
(holder
as
MainNormalViewHolder).setText(beans[position]
as
String)
holder.clickComment(holder.layoutPosition)
}
TYPE.TOP.value
->
{}
}
}
}
override
fun
getItemViewType(position:
Int):
Int
{
when(beans[position])
{
is
String
->
return
TYPE.NORMAL.value
is
TopClass
->
return
TYPE.TOP.value
}
return
super.getItemViewType(position)
}
inner
class
MainNormalViewHolder(itemView:
View)
:
RecyclerView.ViewHolder(itemView)
{
fun
setText(text:
String)
{
itemView.tv_title.text
=
text
}
fun
clickComment(position:
Int)
{
itemView.tv_comment.setOnClickListener
{
(context
as
MainActivity).showInputComment(itemView.tv_comment,
position)
}
}
}
inner
class
MainTopViewHolder(itemView:
View)
:
RecyclerView.ViewHolder(itemView)
}这样一个列表就完成了输入框的产生这里有一个关键的地方,如何将EditText悬浮在键盘上,并且RecyclerView不会被挤上去。这里我们可以使用Dialog,同时在布局中要使用ScrollView来进行占位<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</ScrollView>
<View
android:layout_width="match_parent"
android:layout_height="0.5dip"
android:background="#666666"></View>
<LinearLayout
android:id="@+id/dialog_layout_comment"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确认"/>
</LinearLayout>
</LinearLayout>只有ScrollView进行配合,才能实现我们的效果。来看看效果列表的滚动输入框也有了,这时候就差滚动了。我们可以通过smoothScrollBy来让RecyclerView按X或者Y轴进行滚动。那我们这里到底应该滚动多少距离才对呢?,咱们来计算一下吧图中红色部分为键盘展现之前某条信息评论区所在位置;蓝色部分为键盘,当键盘打开的时候,我们需要将红色的部分移动到黄色的位置。这样黄色顶部与红色顶部中间的区域高度,就是RecyclerView需要滚动的数值这样就好办了,我们使用getLocationOnScreen去获取差值,再加上评论区域高度就行了fun
showInputComment(commentView:
View,
position:
Int)
{
//
RV中评论区起始Y的位置
val
rvInputY
=
getY(commentView)
val
rvInputHeight
=
commentView.height
dialog
=
Dialog(this,
android.R.style.Theme_Translucent_NoTitleBar)
dialog!!.setContentView(R.layout.dialog_comment)
dialog!!.show()
val
handler
=
object
:
Handler()
{}
handler.postDelayed({
//
对话框中的输入框Y的位置
val
dialogY
=
getY(dialog!!.findViewById<LinearLayout>(R.id.dialog_layout_comment))
rv_main.smoothScrollBy(0,
rvInputY
-
(dialogY
-
rvInputHeight))
},
300)
}
private
fun
getY(view:
View):
Int
{
val
rect
=
IntArray(2)
view.getLocationOnScreen(rect)
return
rect[1]
}来看看效果但是还有几个小问题,如果是点击最后一行的话,会因为滚动空间不足而不能实现相同的效果,并且按返回键的时候,键盘先消失,然后再按一次之后Dialog才消失。针对第一个问题,我们直接添加一个空View作为列表最后一项即可,并且高度要等于输入框的高度;第二个问题也很简单,就是监听键盘弹出与隐藏时View高度发生的变化dataclassBottomClass(valvalue:String)点击的时候再添加handler.postDelayed({
//
对话框中的输入框Y的位置
val
dialogY
=
getY(dialog!!.findViewById<LinearLayout>(R.id.dialog_layout_comment))
if
(position
==
arrays.size
-
1)
{
arrays.add(BottomClass(""))
adapter?.height
=
dialog!!.findViewById<LinearLayout>(R.id.dialog_layout_comment).height
adapter?.notifyDataSetChanged()
}
rv_main.smoothScrollBy(0,
rvInput
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年全球奢侈品力量报告-
- 湖北教育学试题及答案
- 长春信息技术职业学院《民族学调查与研究方法》2025-2026学年期末试卷
- 安徽汽车职业技术学院《笔译》2025-2026学年期末试卷
- 厦门华厦学院《语用学概论》2025-2026学年期末试卷
- 阜阳幼儿师范高等专科学校《商业银行业务与经营》2025-2026学年期末试卷
- 运城护理职业学院《超声影像学》2025-2026学年期末试卷
- 福建水利电力职业技术学院《中西医结合妇科》2025-2026学年期末试卷
- 合肥科技职业学院《社区工作》2025-2026学年期末试卷
- 福州职业技术学院《金融监管学》2025-2026学年期末试卷
- (2026年课件合集)教科版三年级科学下册全册教案
- 2026年上海市静安区高三下学期二模化学试卷和答案
- 食品抽检工作方案
- 产业园区招商引资与运营
- 部队内部物业管理制度
- 管道施工施工安全防护方案
- 2024人教版八年级英语下册Unit 1-8作文16篇范文
- 2026年广东省茂名市高三年级第一次综合测试英语(含答案)
- 粮食安全与农产品供应链金融
- 酒店好评培训
- 社区养老服务综合体养老社区老年人精神慰藉可行性研究报告
评论
0/150
提交评论