[英]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_SCREEN
和WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)。 因此,如果您将 Activity 设置为不处理窗口插入,则您必须自己完成所有操作。 并且您将使用View.setOnApplyWindowInsetsListener
方法让自己注意到这些插图何时发生更改,并且您将根据侦听器中提供的值处理 UI 更改(例如设置一些填充)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.