在Android上半透明并调整


KITKAT中出现了在Android中使用半透明的功能。 正确的设计看起来非常令人印象深刻。 随着带有“砰”声的设备的流行,在任何暖灯启动中,这似乎都是一件必需的事情。


让我们想象一下一种情况:您已经捕获了一个出色的设计,可以在StatusBar和NavigationBar下滚动。 因此,您添加了输入字段,并了解AdjustResize对您不起作用。


您可以:


  1. 锤击-用户将自己合上键盘以查看其下方。
  2. 拒绝半透明的样式不是您的样式,就像其他所有人一样,所有东西都会陈旧,可靠。
  3. 用户开始滚动后,请隐藏键盘。 你做得好! 他们做对了所有事情,即使在ios下,Skype也能做到! 而且那里也没有透明度。
  4. 将所有输入字段移动到单独的屏幕。 作为奖励-屏幕的每一次额外转换,减去便利和转换。
  5. 刷新您的AdjustResize

半透明的所有困难


实施半透明有几个困难:


  1. 必须考虑小于KITKAT的设备的设计(我认为在2019年这几乎不相关,尤其是对于新项目)。 也许对于小于LOLLIPOP的设备也许游戏不值得一试? 在那里您无法获得透明的NavigationBar,并且此类设备上的“ Chulok”也不存在。
  2. 如果您正在考虑半透明 ,那么很可能需要比静态背景更复杂的东西,在StatusBar和NavigationBar下滚动的东西,用fitsSystemWindows无法完成的东西 ,这意味着您必须动态替换StatusBar和NavigationBar的高度。
  3. 最后,最主要的是: adjustResize仅在不透明的情况下或对于适合SystemWindows的视图有效

它是关于什么以及如何工作的



解决问题


这似乎是一个简单的解决方案: adjustResize不起作用,因此您需要自己响应键盘的打开。 但是android带来的麻烦不仅不能提供打开键盘的高度(即使对于不同的EditText字段,键盘的高度也可以不同),甚至不能提供打开或关闭键盘的事实。 没有官方的方法。 谷歌怎么样?


当然有解决方案! 并且,当您获得有关当前键盘高度的信息时,您可以使用它进行任何操作:从底部为应该响应键盘的视图添加填充边距 ,现在可以准备自定义的AdjustResize


代号


为了了解键盘是打开的,使用OnGlobalLayoutListener 。 在帖子中粘贴代码片段我看不到重点。 为什么要写50行代码表示100行?
解决方案在存储库中提供


看一下KeyboardHeightProviderBaseTranslucentActivity


该项目尽可能简单,易于理解,其中没有多余的内容不适用于该问题。
有一个简单TextView,RecyclerView和ScrollView的示例。 该技术已经过测试,非常适合NestedScrollView,NestedFragments,CoordinatorLayout,ViewPager等。


附: https : //developer.android.com/reference/android/view/WindowInsets解决了键盘问题,而且没有更糟的问题。

Source: https://habr.com/ru/post/zh-CN436646/


All Articles