当前位置: 首页>編程日記>正文

Android--›键盘表情切换的终极解决方案(已重构)

Android--›键盘表情切换的终极解决方案(已重构)

之前写过一篇文章 Android–>如何优雅的切换表情和键盘(原理), 没有看多的可以看看.

这个方案有一个问题, 当状态栏透明的时候, 就会出现问题. 而且也不支持在Dialog中使用.

实现方式也很简单, 但是代码逻辑很复杂, 不容易修改. 一不小心就会出错, 还找不到原因.

今天这篇文章, 让你焕然一新. 完全颠覆之前的方案.

前提,2个属性

android:windowSoftInputMode=“adjustResize”
android:fitsSystemWindows=“true”


会出现的坑:
如果通过简单的onSizeChange回调, 处理键盘弹出. 那么当状态栏透明之后, 这个方法是不会回调的.

因为, 当状态栏透明之后, 这个时候你的API已经满足了>=20. 这个时候:onApplyWindowInsets 此方法正好就是API 20的时候加入进来的.

从20开始, 系统改变了键盘弹出时, 布局的响应属性, 从原来的Height变化, 变成了最新的Padding变化.

也就是: 原来键盘弹出的时候, Layout的高度会变为原来的高度-键盘的高度;
而现在: Layout的高度不变, 但是PaddingBottom会变为键盘的高度.

这样就会导致onSizeChanged不会回调, 因为高宽都一样.

如果此时, 你要对不同的系统版本最适配, 提供对应的解决方案的话…那么,你将走向一条不归路.

其实,聪明的你, 应该也能想出解决方法.


以下是我的方案:

1:onMeasure
在测量内容高度和表情高度的时候, 根据键盘是否弹出, paddingBottom是否为空, 布局的height是否有变化.

决定内容的高度, 和 表情的高度. 主要是一定要确定内容的高度(要考虑键盘).

2:onLayout
有了高度, 就可以摆放内容布局和表情布局.

其实只要内容布局摆放合理, 表情布局在键盘弹出的时候可以任意摆放. 只要不影响内容就行.


就这么简单.


2019-8-20重构代码

  • 兼容低版本安卓系统
  • 支持最新版微信那样的动画
  • 支持多child布局
  • 支持padding处理
  • 支持SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN属性
  • 支持普通输入框切换到安全密码输入框
  • 支持布局preview
  • 内容布局支持wrap_conent, margin属性.(高度很小时, 默认从Gravity.BOTTOM开始布局)
  • 支持表情布局恢复.(如:显示键盘之前是表情布局, 那么隐藏键盘后就会显示表情布局)
  • 支持ViewPager+多Fragment中使用, 支持Activity+多Fragment中使用, 需要手动设置enableSoftInput, 任何时候, 只要保证有且仅有一个SoftInputLayout处于激活状态就行
  • 支持anim padding top属性
  • 支持动画回调, 可以入侵动画属性值

砖厂地址:
https://github.com/angcyo/ExKeyboardDemo


群内有各(pian)种(ni)各(jin)样(qun)的大佬,等你来撩.

联系作者

点此快速加群

请使用QQ扫码加群, 小伙伴们都在等着你哦!

关注我的公众号, 每天都能一起玩耍哦!


https://www.fengoutiyan.com/post/14903.html

相关文章:

  • 雷蛇键盘终极版2014
  • 键盘带手托好还是不带好
  • 安卓变苹果表情
  • 安卓表情包怎么和苹果表情包一样
  • emoji表情最全的安卓输入法
  • 键盘分什么
  • 手机键盘上的表情是怎样弄出来的
  • 键盘手教程
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機