【问题标题】:In Android, what are window insets?在 Android 中,什么是窗口插图?
【发布时间】:2016-05-21 06:32:51
【问题描述】:

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

以下是 Android 对此的评价:

WindowInsets 是不可变的,将来可能会扩展到包括更多的插入类型。

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

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

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

【问题讨论】:

    标签: android window


    【解决方案1】:

    您可以使用onApplyWindowInsets:

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

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

    【讨论】:

    【解决方案2】:

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

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

    有几个例子here


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


    它们也可以用在其他视图中以处理特殊的渲染要求,例如在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。 “它们是某种彩色边距(用于 Android Wear)。”明显错了。这些不仅用于 Android Wear,还用于 Android 智能手机,在这种情况下,它们代表系统 UI 区域,例如状态栏和导航栏
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我写了sample

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多