簡體   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