android替换状态栏并阻止访问现有状态栏

时间:2014-07-07 08:58:26

标签: c# android xamarin statusbar

我在这里看过几篇帖子,但这些帖子都不是我想要的。他们让我走了很长的路,但我还有一个问题需要解决。

我正在使用Xamarin for Android,目前我的目标是14级及以上的API。

我有以下代码(C#和Xamarin)

IWindowManager windowManager;
WindowManagerLayoutParams parm = null;

View statusBarView = new View(this);

windowManager = GetSystemService(Context.WindowService).JavaCast<IWindowManager>();

statusBarView.SetBackgroundColor(Color.Green);

parm = new WindowManagerLayoutParams(WindowManagerLayoutParams.FillParent, 400,
                                     WindowManagerTypes.SystemOverlay, 
                                     WindowManagerFlags.LayoutNoLimits,
                                     Format.Transparent);

parm.Gravity = GravityFlags.Top;

windowManager.AddView(statusBarView, parm); 

注意:400只是我投入的数字进行测试,我实际上会得到状态栏的实际高度。

这显示很好,但用户仍然可以访问通知栏。有几个应用程序可以做我想要做的事情,我只需要帮助解决最后一部分难题。

该部分是如何防止触摸事件进入当前状态栏。

非常感谢所有帮助!

2 个答案:

答案 0 :(得分:0)

您想要隐藏状态栏吗? 如果是,https://developer.android.com/training/system-ui/status.html

答案 1 :(得分:0)

如果要禁用状态栏,请使用此

protected override void OnCreate(Bundle bundle)

{
customViewGroup view = new customViewGroup(this);

            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;

            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();
            }
        }

要再次启用,请使用

manager.RemoveView(view);