@@ -22,14 +22,9 @@ namespace Avalonia.WebView2.Sample;
2222 ConfigurationChanges = ConfigChanges . Orientation | ConfigChanges . ScreenSize | ConfigChanges . UiMode ) ]
2323sealed class MainActivity : AvaloniaMainActivity < App >
2424{
25- /// <summary>
26- /// 获取状态栏的高度
27- /// </summary>
28- /// <param name="ctx"></param>
29- /// <returns></returns>
30- static int GetStatusBarHeight ( Context ctx )
25+ static int GetDimensionPixelSizeByAndroidDimen ( Context ctx , string identifierName )
3126 {
32- var resId = ctx . Resources ! . GetIdentifier ( "status_bar_height" , "dimen" , "android" ) ;
27+ var resId = ctx . Resources ! . GetIdentifier ( identifierName , "dimen" , "android" ) ;
3328 if ( resId > 0 )
3429 {
3530 var h = ctx . Resources . GetDimensionPixelSize ( resId ) ;
@@ -38,6 +33,20 @@ static int GetStatusBarHeight(Context ctx)
3833 return default ;
3934 }
4035
36+ /// <summary>
37+ /// 获取顶部状态栏的高度
38+ /// </summary>
39+ /// <param name="ctx"></param>
40+ /// <returns></returns>
41+ static int GetStatusBarHeight ( Context ctx ) => GetDimensionPixelSizeByAndroidDimen ( ctx , "status_bar_height" ) ;
42+
43+ /// <summary>
44+ /// 获取底部导航栏的高度
45+ /// </summary>
46+ /// <param name="ctx"></param>
47+ /// <returns></returns>
48+ static int GetNavigationBarHeight ( Context ctx ) => GetDimensionPixelSizeByAndroidDimen ( ctx , "navigation_bar_height" ) ;
49+
4150 /// <summary>
4251 /// 获取 DPI 缩放比例
4352 /// </summary>
@@ -60,6 +69,23 @@ protected override void OnCreate(Bundle? savedInstanceState)
6069 MainViewModel . SetStatusBarMargin ( top : statusBarHeight , scaling : scaling ) ;
6170
6271 base . OnCreate ( savedInstanceState ) ;
72+
73+ Window ! . DecorView . ApplyWindowInsets += OnApplyWindowInsets ;
74+ }
75+
76+ WindowInsets OnApplyWindowInsets ( View v , WindowInsets insets )
77+ {
78+ var insetsCompat = WindowInsetsCompat . ToWindowInsetsCompat ( insets , v ) ! ; // https://developer.android.google.cn/reference/androidx/core/view/WindowInsetsCompat#toWindowInsetsCompat(android.view.WindowInsets,android.view.View)
79+ // https://developer.android.google.cn/reference/androidx/core/view/WindowInsetsCompat#getInsetsIgnoringVisibility(int)
80+ // https://developer.android.google.cn/reference/androidx/core/view/WindowInsetsCompat.Type
81+ var navigationBars = insetsCompat . GetInsetsIgnoringVisibility ( WindowInsetsCompat . Type . NavigationBars ( ) ) ! ;
82+ var statusBars = insetsCompat . GetInsetsIgnoringVisibility ( WindowInsetsCompat . Type . StatusBars ( ) ) ! ;
83+ global ::Android . Util . Log . Warn ( "WebView2" ,
84+ $ """
85+ NavigationBars: l={ navigationBars . Left } , r={ navigationBars . Right } , t={ navigationBars . Top } , b={ navigationBars . Bottom }
86+ StatusBars: l={ statusBars . Left } , r={ statusBars . Right } , t={ statusBars . Top } , b={ statusBars . Bottom }
87+ """ ) ;
88+ return insets ;
6389 }
6490
6591 protected override AppBuilder CustomizeAppBuilder ( AppBuilder builder )
0 commit comments