gpt4 book ai didi

android - 有多少个 WindowInsets?

转载 作者:IT老高 更新时间:2023-10-28 23:34:46 31 4
gpt4 key购买 nike

我不了解 WindowInsets rects,因为文档说:

The system window inset represents the area of a full-screen window that is partially or fully obscured by the status bar, navigation bar, IME or other system windows.

所以,可以有多个 WindowInsets,每个都有自己的矩形(一个用于状态栏,另一个用于导航栏...),我该如何检索它们?

还是只有一个 WindowInsets 并且它的左上右下坐标是应用程序可用窗口的矩形?

最佳答案

WindowInsets描述了一组窗口内容的插图。换句话说,WindowInsets 拥有应用程序可用区域的一个矩形(还有其他信息,例如 isRound)。可用区域不包括 StatusBarNavigationBar 的矩形。

如果你只想知道StatusBarNavigationBar的高度,查看this .

您可以获得 WindowInsets 如下所示。以下示例使用 WindowInsetsCompat为了兼容性。

在你的 style.xml 中:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
...
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>

在您的 AndroidManifest.xml 中

<application
...
android:theme="@style/AppTheme">

...

</application>

在您的布局 xml 中:(fitsSystemWindows 应设置为获取 WindowInsets。)

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

</FrameLayout>

在您的 Activity 中(或任何地方):

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

View container = findViewById(R.id.container);

ViewCompat.setOnApplyWindowInsetsListener(container, new OnApplyWindowInsetsListener() {
@Override
public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {

//you can do something with insets.
int statusBar = insets.getSystemWindowInsetTop(); //this is height of statusbar
int navigationBar = insets.getStableInsetBottom(); //this is height of navigationbar
Log.d("MainActivity", String.format("%s %s", statusBar, navigationBar));

ViewCompat.onApplyWindowInsets(v, insets);
return insets;
}
});
}
}

WindowInsets 是这样的:

enter image description here

关于android - 有多少个 WindowInsets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38727257/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com