当前位置: 首页 > article >正文

android含有EditText的键盘弹出后界面的正确处理

android布局中含有EditText是一个蛮难处理的场景。因为包裹它的布局不同和activity的softInput不同产生的界面变化是不一样的。

请添加图片描述
对于产生结果总共有4个条件:

  1. 根布局是不是NestedScrollView(理论上RecyclerView也一致);
  2. 根布局是不是添加了android:fitsSystemWindows=“true” ;
  3. Activity的android:windowSoftInputMode=“adjustResize|stateHidden” 是AdjustResize 还是AdjustPan;或者代码调用了类似的代码;
  4. 是否调用了透明状态栏的代码,
         window.run {
         addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
         WindowCompat.setDecorFitsSystemWindows(this, false)
         statusBarColor = Color.TRANSPARENT
         navigationBarColor = Color.TRANSPARENT
         ...
    
     	或者
     	activity.enableEdgeToEdge()
    

这些条件组合起来会得出不同的结果。
现在把最后的结论抛出来:

  1. AdjustPan + ScrollView
    可以简单抬起;如果有透明的情况,会顶到了状态栏上去,而且控件在比较下面,也会遮挡。0分。
  2. AdjustResize + ScrollView
    不调用透明状态栏,可以正常表现。100分。但是现在android15要求必须延展透明上去了,0分。
    调用了透明状态栏,键盘出来无任何反应。30分(还行,界面不变乱)。
    其他:
    3.1 如果没有任何可以滚动的布局比如NestedScrollView,而仅仅是普通LinearLayout,adjustResize是没有作用的;
    3.2 如果ScrollView不放在别的布局(而且比如是height MATCH_PARENT)里面,adjustResize是好的;但是透明状态栏下不好;
    3.3 adjustPan在透明状态栏下,是一定会顶到statusbar上去的。

推荐做法:
如果你的EditText在比较下面,
就一定要用NestedScrollView去包裹;
再给它套一层FrameLayout,设置android:fitsSystemWindows=“true” , height必须MATCH_PARENT;
然后activity android:windowSoftInputMode=“adjustResize|stateHidden”。
必须这样做才是最正确的。


http://www.kler.cn/news/310731.html

相关文章:

  • 人工智能 | 基于ChatGPT开发人工智能服务平台
  • 单片机嵌入式编程中常用技术点
  • Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook
  • Java在零工市场中的应用:构建灵活高效的劳动力平台
  • 【算法】局部敏感哈希(LSH):高效解决相似性搜索问题的利器
  • html页面整合vue2或vue3
  • 选择适合你企业发展的服务器
  • 【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
  • C++类和对象(4)
  • Linux平台UOS系统摄像头播放
  • 爬虫--翻页tips
  • .Net Gacutil工具(全局程序集缓存工具)使用教程
  • qt-creator-10.0.2之后版本的jom.exe构建和编译速度慢下来了
  • 【Python日志功能】二.高级配置与日志处理器
  • 怎么浏览URL的PDF文件呢
  • 性能测试笔记
  • 【Linux】网络层协议——IP
  • 跨界融合,GIS如何赋能游戏商业——以《黑神话:悟空》为例
  • flutter hive的使用
  • 万兆时代 TCP/IP如何赋能以太网飞跃
  • CentOS 中使用 OpenSSL 查看 SSL 证书详细信息
  • 利用模糊综合评价法进行数值评分计算——算法过程
  • JS 性能优化
  • Linux Kernel Makefiles 编译标志详解
  • C++在Linux实现多线程和多进程的TCP服务器和客户端通信
  • 【公告】博客正在迁移至 git pages
  • RaisePropertyChanged(() => DateName)详解记录一下
  • 前端开发之迭代器模式
  • linux 解压缩
  • 用Python获取PDF页面的大小、方向和旋转角度