热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优化直播应用底部聊天框弹出机制,确保布局稳定兼容虚拟按键设备

为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整`activity_main.xml`布局文件实现,确保了更好的用户体验和界面适配。
图片1图片2图片1图片2

效果图,如上

注意打开应用后,要点击第一个输入框,这是因为先要获取一次键盘的高度,不然首先点击第二个输入框,会出现整体布局挤压的现象。

布局文件

activity_main.xml

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_hljs-string">"match_parent"
android:layout_hljs-string">"match_parent"
android:background="@drawable/splash"
tools:cOntext="org.dync.softkeyboarddemo.MainActivity">

android:id="@+id/edt"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="获取键盘高度"/>
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:text="键盘高度"
android:id="@+id/text"
android:layout_below="@+id/edt"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

android:id="@+id/editText"
android:layout_hljs-string">"match_parent"
android:layout_hljs-string">"wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />



在Activity中你只需编写以下代码就可实现底部EditText随键盘移动。
MainActivity

SoftKeyboardUtil.observeSoftKeyboard(activity, new SoftKeyboardUtil.OnSoftKeyboardChangeListener() {
@Override
public void onSoftKeyBoardChange(int softKeybardHeight, boolean isShow) {
mSoftKeybardHeight = softKeybardHeight;
isOpen = isShow;
if (isShow) {
onShowKeyboard(softKeybardHeight);
if (isTouch) {//点击输入框则不移动控件
editText.animate().translationYBy(-softKeybardHeight).setDuration(duration).start();
}
Log.e("TAG", "isShow--平移高度:" + -mSoftKeybardHeight);
} else {
onHideKeyboard(softKeybardHeight);
editText.animate().translationYBy(softKeybardHeight).setDuration(duration).start();
Log.e("TAG", "isHide--平移高度:" + mSoftKeybardHeight);
isTouch = true;//这里一定要设置,不然点击输入框,控件只会在第一次能移动,之后不会移动了
}
}
}
});

editText.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("TAG", "--onTouch--");
if (!isOpen) {//键盘没有打开
if (isTouch) {//这里是因为onTouch()方法会不止一次调用,所以用boolean值来使得控件只移动一次
//这里设为false目的是防止这里延时弹出键盘会触发onSoftKeyBoardChange()会再一次调用移动控件的方法
isTouch = false;
//先移动到键盘弹出的高度再手动弹出键盘,这样就不会出现挤压布局的效果
editText.animate().translationYBy(-mSoftKeybardHeight).setDuration(duration).start();
Log.e("TAG", "平移高度:" + -mSoftKeybardHeight);
new Handler().postDelayed(new Runnable() {
public void run() {
SoftKeyboardUtil.showKeyboard(activity, editText);
}
}, duration);
}
}
return false;//这里不能返回true,不然焦点不会聚焦到该控件
}
});

...

@Override
protected void onDestroy() {
super.onDestroy();
SoftKeyboardUtil.removeGlobalOnLayoutListener(this);
}

代码详情请到github上预览。

转载请注明出处,谢谢!


推荐阅读
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 本文介绍了如何使用 Gesture Detector 和 overridePendingTransition 方法来实现滑动界面和过渡动画。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文介绍了一种通过设置主题(Theme)来实现快速启动的Android引导页,并详细说明了如何避免因不同屏幕分辨率导致的图片拉伸问题。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • 本文探讨了一种统一的语义数据模型,旨在支持物联网、建筑及企业环境下的数据转换。该模型强调简洁性和可扩展性,以促进不同行业间的插件化和互操作性。对于智能硬件开发者而言,这一模型提供了重要的参考价值。 ... [详细]
  • 本文介绍了 JSON Schema 和 XML Schema 的基本概念,并详细讲解了如何使用 AJV 进行 JSON 数据校验。通过具体的示例和扩展方法,帮助读者更好地理解和应用这些工具。 ... [详细]
  • Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ... [详细]
author-avatar
书友48169582
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有