
在KITKAT中出现了在Android中使用半透明的功能。 正确的设计看起来非常令人印象深刻。 随着带有“砰”声的设备的流行,在任何暖灯启动中,这似乎都是一件必需的事情。
让我们想象一下一种情况:您已经捕获了一个出色的设计,可以在StatusBar和NavigationBar下滚动。 因此,您添加了输入字段,并了解AdjustResize对您不起作用。
您可以:
- 锤击-用户将自己合上键盘以查看其下方。
- 拒绝半透明的样式不是您的样式,就像其他所有人一样,所有东西都会陈旧,可靠。
- 用户开始滚动后,请隐藏键盘。 你做得好! 他们做对了所有事情,即使在ios下,Skype也能做到! 而且那里也没有透明度。
- 将所有输入字段移动到单独的屏幕。 作为奖励-屏幕的每一次额外转换,减去便利和转换。
- 刷新您的AdjustResize 。
半透明的所有困难
实施半透明有几个困难:
- 必须考虑小于KITKAT的设备的设计(我认为在2019年这几乎不相关,尤其是对于新项目)。 也许对于小于LOLLIPOP的设备,也许游戏不值得一试? 在那里您无法获得透明的NavigationBar,并且此类设备上的“ Chulok”也不存在。
- 如果您正在考虑半透明 ,那么很可能需要比静态背景更复杂的东西,在StatusBar和NavigationBar下滚动的东西,用fitsSystemWindows无法完成的东西 ,这意味着您必须动态替换StatusBar和NavigationBar的高度。
- 最后,最主要的是: adjustResize仅在不透明的情况下或对于适合SystemWindows的视图有效 。
它是关于什么以及如何工作的

解决问题
这似乎是一个简单的解决方案: adjustResize不起作用,因此您需要自己响应键盘的打开。 但是android带来的麻烦不仅不能提供打开键盘的高度(即使对于不同的EditText字段,键盘的高度也可以不同),甚至不能提供打开或关闭键盘的事实。 没有官方的方法。 谷歌怎么样?
当然有解决方案! 并且,当您获得有关当前键盘高度的信息时,您可以使用它进行任何操作:从底部为应该响应键盘的视图添加填充或边距 ,现在可以准备自定义的AdjustResize 。
代号
为了了解键盘是打开的,使用OnGlobalLayoutListener 。 在帖子中粘贴代码片段我看不到重点。 为什么要写50行代码表示100行?
解决方案在存储库中提供 。
看一下KeyboardHeightProvider和BaseTranslucentActivity 。
该项目尽可能简单,易于理解,其中没有多余的内容不适用于该问题。
有一个简单TextView,RecyclerView和ScrollView的示例。 该技术已经过测试,非常适合NestedScrollView,NestedFragments,CoordinatorLayout,ViewPager等。
附: https : //developer.android.com/reference/android/view/WindowInsets解决了键盘问题,而且没有更糟的问题。