我正在尝试在全屏模式下隐藏状态栏和通知。用户应该不能在Xamarin android中拉/滑下状态/通知栏。
在本机android中,它可以使用以下属性(Android版本8.0)正常工作。
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
getWindow().setFlags(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
等效于xamarin中的 TYPE_APPLICATION_OVERLAY 。
是否有Xamarin.Android解决方案?
我尝试了以下xamarin的属性:
View decorView = Window.DecorView;
var uiOptions = (int)decorView.SystemUiVisibility;
var newUiOptions = (int)uiOptions;
newUiOptions |= (int)SystemUiFlags.HideNavigation;
newUiOptions |= (int)SystemUiFlags.LayoutHideNavigation;
newUiOptions |= (int)SystemUiFlags.LayoutFullscreen;
newUiOptions |= (int)SystemUiFlags.Fullscreen;
newUiOptions |= (int)SystemUiFlags.ImmersiveSticky;
decorView.SystemUiVisibility = (StatusBarVisibility)newUiOptions;
Window.AddFlags(WindowManagerFlags.TranslucentNavigation);
Window.AddFlags(WindowManagerFlags.TranslucentStatus);
Window.ClearFlags(WindowManagerFlags.ForceNotFullscreen);
我们将不胜感激。谢谢
答案 0 :(得分:0)
将OnCreate中的窗口标志更改为全屏应该可以解决问题
this.Window.AddFlags(WindowManagerFlags.Fullscreen); //to show
this.Window.ClearFlags(WindowManagerFlags.Fullscreen); //to hide
在不起作用的情况下还原。
更新:
if ((int)Android.OS.Build.VERSION.SdkInt >= 19)
{
var decorView = this.Window.DecorView;
decorView.SystemUiVisibility = StatusBarVisibility.Hidden;// (StatusBarVisibility)newUiOptions;
}
else
{
var attrs = this.Window.Attributes;
attrs.Flags |= WindowManagerFlags.Fullscreen;
this.Window.Attributes = attrs;
}
答案 1 :(得分:0)
此代码用于生成一个视图以覆盖statusBar区域,但不确定它是否适用于Oreo。
需要SYSTEM_ALERT_WINDOW权限。
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
WindowManagerLayoutParams localLayoutParams = new WindowManagerLayoutParams();
localLayoutParams.Type = WindowManagerTypes.SystemError;
localLayoutParams.Gravity = GravityFlags.Top;
localLayoutParams.Flags = WindowManagerFlags.NotFocusable |
WindowManagerFlags.NotTouchModal | WindowManagerFlags.LayoutInScreen;
localLayoutParams.Width = WindowManagerLayoutParams.MatchParent;
localLayoutParams.Height = (int)(50 * Resources.DisplayMetrics.ScaledDensity);
localLayoutParams.Format = Format.Transparent;
IWindowManager manager = ApplicationContext.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
customViewGroup view = new customViewGroup(this);
manager.AddView(view, localLayoutParams);
}
public class customViewGroup : ViewGroup
{
public customViewGroup(Context context) : base(context)
{
}
public override bool OnTouchEvent(MotionEvent ev)
{
return true;
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
// throw new NotImplementedException();
}
}
希望这会有所帮助。
原始Java代码源: https://stackoverflow.com/a/25397029/3814729