安卓原生聊天面板开发(四)整体交互实现

请添加图片描述

背景

产品喝大了,说开发一个聊天界面,功能参照微信即可。
这是应了那句话:新人一开口,便知有没有~~真是风趣幽默。

问题分析

其实仔细看微信的聊天面板,功能拆分出来,主要有以下几点:
(1)emoji表情,自定义表情等等。这里可以归类为“表情”tab。
(2)语音交互,音频录制播放压缩。
(3)媒体交互,选择图片,视频,文件等等。
核心就是上面的内容,锦上添花的功能就不再叙述了。

实现效果

在这里插入图片描述

开发环境

win10
jdk8+
as2024+

本文内容

本文将会讲解整体的交互实现思路,如键盘交互,删除文本细节等。文末将会有源码地址。

(一)键盘交互

对于键盘交互,其实是一个很核心的问题。设想一下,如果用户在使用输入控件的时候,进行键盘的切换,然后界面突然闪一下,或者说键盘缩一下,又弹出来。这用户体验一下子就很拉跨。所以必须要移除掉“闪一下”“突然弹出来”这种不好的现象。

(1)键盘闪一下,到底是为什么呢?主要的复现场景如下:
(1-1)输入法显示中,控件中点击按钮,接下来底部布局显示,然后键盘隐藏,这个时候,界面就会闪一下,然后键盘消失。
(1-2)输入法隐藏中,空间中点击按钮,接下来布局显示,键盘也显示,这种情况也会闪一下。

为了解决上述的问题,我们有必要先去了解一下安卓键盘的“模式”:
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE 和
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING

resize故名思意,就是重新设置大小用于适配键盘操作。
nothing,就是说不管你布局了,不做适配。

那换一种思路,是不是只在我们需要键盘不优先响应的情况下,先设置对应的“模式”,然后再去处理布局后,及时调整键盘最终的模式,这样就完成了适配工作了。
还要注意。如果监听键盘完全收起?博主这里是直接监听R.id.content的viewTreeObserver实现,当键盘收起的时候,通过该监听,可以监听到键盘是否完全收起。核心代码如下:
 //getActivity有可能为空
                                FrameLayout content = getActivity().findViewById(android.R.id.content);
                                content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                                    @Override
                                    public void onGlobalLayout() {
                                        content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                                        mVBottomContainer.setVisibility(bottomViewShow ? View.VISIBLE : View.GONE);
                                    }
                                });

上述代码就是当键盘完全收起的时候,对指定布局进行显隐。

注意点

对于设置键盘模式,经过实测,是有一定的延时才会实现。

源码

源码获取方式,关注回复: 安卓原生聊天面板源码
即可获得:
在这里插入图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值