2014-07-07 2 views
0

여기에 여러 게시물을 읽었으며 그 중 아무 것도 내가 찾고있는 것입니다. 그들은 먼 길을 가졌지 만 해결해야 할 문제가 하나 있습니다.android는 상태 표시 줄을 바꾸고 기존 상태 표시 줄에 액세스하지 못하도록합니다.

Android 용 Xamarin을 사용하고 있으며 현재 API 레벨 14 이상을 타겟팅 중입니다.

나는 (C# 및 자 마린)

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 내가 테스트를 위해 거기에 던진 단지 숫자가 실제로 상태 표시 줄의 실제 높이를 얻을 것입니다.

이것은 잘 표시되지만 사용자는 알림 표시 줄에 계속 액세스 할 수 있습니다. 거기에 내가하고 싶은 일을하는 몇 가지 응용 프로그램이 있습니다, 나는 단지 퍼즐의 마지막 부분에 도움이 필요합니다.

터치 이벤트가 현재 상태 표시 줄에 표시되지 않도록하는 방법입니다.

모든 도움을 주시면 대단히 감사하겠습니다.

답변

0

상태 표시 줄을 숨기시겠습니까? 당신이 상태 표시 줄을 사용하지 않으려면 예라면, https://developer.android.com/training/system-ui/status.html

+0

를 사용할 수 있습니다. 기존의 것을 대체해야합니다. –

+0

나는 루트없이 그를 제거 할 수 있다고 생각하지 않는다. (노바가 올바르게 기억한다면 루트가 필요하다.) – Yoavst

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