繁体   English   中英

在 Android 中,什么是窗口插入?

[英]In Android, what are window insets?

这听起来像一个愚蠢的问题,如果是的话,我很抱歉,但我已经四处搜索以获得它们是什么的视觉表示,但一无所获。

以下是 Android 对此的评论:

WindowInsets是不可变的,将来可能会扩展以包含更多的 inset 类型。

http://developer.android.com/reference/android/view/WindowInsets.html

谷歌图片将其自动更正为窗口插入...

为什么有人会使用这些“插图”? 和没有home实体键的手机导航栏有什么关系?

它们是某种彩色边距(用于 Android Wear)。

它们用于创建从主要内容到实际边框的填充:

有几个例子在这里


这是一张有 2 个插图的图像:圆形/方形。

在此处输入图片说明


它们也可以在其他视图中使用来处理特殊的渲染要求,例如在ScrollView 中:可以使用本问题中提到的 insideInset 定义放置实际滚动的位置。

<ScrollView
    android:id="@+id/view2"
    android:layout_width="100dip"
    android:layout_height="120dip"
    android:padding="8dip"
    android:scrollbarStyle="insideInset"
    android:background="@android:color/white"
    android:overScrollMode="never">

插图是视图中不应放置元素的区域,例如状态栏或导航栏后面。 把它们想象成窗户的填充物。

如果您想在它们后面绘制,例如将图像放在应该位于半透明状态栏后面的顶部,则需要使用窗口插图。 在某些视图中,这就像放置android:fitsSystemWindows=true一样简单,但在其他android:fitsSystemWindows=true ,您必须覆盖onApplyWindowInsets方法。

通常手机的窗口插入是状态栏高度的大小为顶部,导航栏的大小为底部,0为左右。 但它可能有所不同,例如在手表或带有物理按钮的手机中。

您可以使用onApplyWindowInsets

@Override
public void onApplyWindowInsets(WindowInsets insets) {
    super.onApplyWindowInsets(insets);
    mRound = insets.isRound();
}

检测可穿戴Android设备是圆形还是方形,然后使用该信息绘制适当的应用程序界面(带有圆形或方形背景)

WindowInsets是一个表示所谓的window insets 的类 它们是您的内容不应与屏幕的不可用区域重叠的某种边距/填充。 正如许多人所建议的那样,它们可用于检测 Android Wear 设备是否为圆形并处理该形状。 然而,最常见的使用案例可能是在手机上。 状态栏和导航栏都是系统 UI 的一部分,因此它们覆盖屏幕的不同房间,您不应将内容放入其中。 Activity ,根据设置的窗口标志,可以使用整个屏幕或在下方调整大小状态栏和导航栏上方(请参阅WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREENWindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS )。 因此,如果您将 Activity 设置为不处理窗口插入,则您必须自己完成所有操作。 并且您将使用View.setOnApplyWindowInsetsListener方法让自己注意到这些插图何时发生更改,并且您将根据侦听器中提供的值处理 UI 更改(例如设置一些填充)。

我写了示例

这个存储库可以帮助掌握android windows insets的想法和Edge-To-Edge的概念+我们可以在不假设“键盘应该超过屏幕的X部分”的情况下检测键盘

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM