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

时间:2016-02-10 18:28:23

标签: android window

这听起来像一个愚蠢的问题,如果是的话,我很抱歉,但我已经四处搜索,以便直观地展示它们是什么,并且没有提出任何问题。

以下是Android对此的评价:

  

WindowInsets是不可变的,可能会在未来扩展为包含更多插入类型。

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

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

为什么有人会使用这些“插图”?它们与没有家用物理钥匙的手机上的导航栏有什么关系吗?

5 个答案:

答案 0 :(得分:6)

他们某种彩色边距(在Android Wear中使用)。

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

有几个例子here

这是一张带有2个插图的图像:Circle / Squared。

enter image description here

它们也可以在其他视图中用于处理特殊的渲染要求,例如在ScrollView中:可以使用this question中提到的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">

答案 1 :(得分:2)

您可以使用onApplyWindowInsets

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

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

答案 2 :(得分:2)

插图是视图中不应放置元素的区域,例如状态栏或导航栏的后面。就像在窗口上填充一样。

如果要在其后方绘画,例如当您放置顶部应该在半透明状态栏后面的图像时,则需要修改窗口插图。在某些视图中,这就像放置android:fitsSystemWindows=true一样容易,但是在其他视图中,您将不得不覆盖onApplyWindowInsets方法。

通常,电话的窗口插图的顶部是状态栏的高度,底部是导航栏的高度,左侧和右侧为0。但这可能有所不同,例如在带有物理按钮的手表或电话中。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我写了sample

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

enter image description here

enter image description here

enter image description here