[Android] AppCompat NavigationBar should handle Transluscent Flags (#1287)
* AppCompat NavigationBar handle Transluscent Flags * Handle padding on Navigationbar when rotated if the app uses any TransluscentFlags padding will be added to the Toolbar. When device is rotated a new height is calculated. This leads to the Toolbar being reset by ResetToolbar(). If the old toolbar was adjusted by toppadding the new toolbar should get the same padding to not be layout out under the statusbar
This commit is contained in:
Родитель
8ede382d02
Коммит
8ee768ce5f
|
@ -38,6 +38,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
||||||
ActionBarDrawerToggle _drawerToggle;
|
ActionBarDrawerToggle _drawerToggle;
|
||||||
FragmentManager _fragmentManager;
|
FragmentManager _fragmentManager;
|
||||||
int _lastActionBarHeight = -1;
|
int _lastActionBarHeight = -1;
|
||||||
|
int _statusbarHeight;
|
||||||
AToolbar _toolbar;
|
AToolbar _toolbar;
|
||||||
ToolbarTracker _toolbarTracker;
|
ToolbarTracker _toolbarTracker;
|
||||||
DrawerMultiplexedListener _drawerListener;
|
DrawerMultiplexedListener _drawerListener;
|
||||||
|
@ -395,6 +396,14 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
||||||
|
|
||||||
if (actionBarHeight <= 0)
|
if (actionBarHeight <= 0)
|
||||||
return Device.Info.CurrentOrientation.IsPortrait() ? (int)Context.ToPixels(56) : (int)Context.ToPixels(48);
|
return Device.Info.CurrentOrientation.IsPortrait() ? (int)Context.ToPixels(56) : (int)Context.ToPixels(48);
|
||||||
|
|
||||||
|
if (((Activity)Context).Window.Attributes.Flags.HasFlag(WindowManagerFlags.TranslucentStatus) || ((Activity)Context).Window.Attributes.Flags.HasFlag(WindowManagerFlags.TranslucentNavigation))
|
||||||
|
{
|
||||||
|
if (_toolbar.PaddingTop == 0)
|
||||||
|
_toolbar.SetPadding(0, GetStatusBarHeight(), 0, 0);
|
||||||
|
|
||||||
|
return actionBarHeight + GetStatusBarHeight();
|
||||||
|
}
|
||||||
|
|
||||||
return actionBarHeight;
|
return actionBarHeight;
|
||||||
}
|
}
|
||||||
|
@ -410,6 +419,18 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
||||||
valueAnim.Update += (s, a) => icon.Progress = (float)a.Animation.AnimatedValue;
|
valueAnim.Update += (s, a) => icon.Progress = (float)a.Animation.AnimatedValue;
|
||||||
valueAnim.Start();
|
valueAnim.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int GetStatusBarHeight()
|
||||||
|
{
|
||||||
|
if (_statusbarHeight > 0)
|
||||||
|
return _statusbarHeight;
|
||||||
|
|
||||||
|
int resourceId = Resources.GetIdentifier("status_bar_height", "dimen", "android");
|
||||||
|
if (resourceId > 0)
|
||||||
|
_statusbarHeight = Resources.GetDimensionPixelSize(resourceId);
|
||||||
|
|
||||||
|
return _statusbarHeight;
|
||||||
|
}
|
||||||
|
|
||||||
void AnimateArrowOut()
|
void AnimateArrowOut()
|
||||||
{
|
{
|
||||||
|
@ -606,6 +627,11 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
||||||
_toolbar = null;
|
_toolbar = null;
|
||||||
|
|
||||||
SetupToolbar();
|
SetupToolbar();
|
||||||
|
|
||||||
|
// if the old toolbar had padding from transluscentflags, set it to the new toolbar
|
||||||
|
if (oldToolbar.PaddingTop != 0)
|
||||||
|
_toolbar.SetPadding(0, oldToolbar.PaddingTop, 0, 0);
|
||||||
|
|
||||||
RegisterToolbar();
|
RegisterToolbar();
|
||||||
UpdateToolbar();
|
UpdateToolbar();
|
||||||
UpdateMenu();
|
UpdateMenu();
|
||||||
|
@ -911,4 +937,4 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче