2012-02-27 59 views
1

我使用Mono開發了我的應用程序。我有最新版本4.0.3。我AndroidManifest.xml中規定:Honeycomb 3.1/Mono for Android堅持'LightsOut'

<uses-sdk android:targetSdkVersion="11" android:minSdkVersion="8" /> 

的應用在平板電腦上運行,因此在蜂窩我需要隱藏在屏幕底部的狀態欄。這是我怎麼做的(用一個簡單的擴展方法):

internal static void LightsOut(this View view) 
     { 
      try 
      { 
       IntPtr view_setSystemUiVisibility = JNIEnv.GetMethodID(view.Class.Handle, "setSystemUiVisibility", "(I)V"); 
       JNIEnv.CallVoidMethod(view.Handle, view_setSystemUiVisibility, new JValue(1)); 
      } 
      catch 
      { } 
     } 

我在我實例化的每個視圖上調用它。在我的摩托羅拉Xoom上運行3.0.1,這個工程很棒

在我的三星Galaxy Tab運行3.1,它的工作;但狀態欄會在短時間內回來。在Android日誌中,我看到LightsOn()被調用...

如何防止狀態欄回到3.1?我看到這個事件:

http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html

,我想我可以用它來隱藏狀態欄,如果它回來。但我不明白我可以如何訂閱它(它不顯示在Intellisense中)。

回答

2

在狀態欄回來之前發生了什麼具體事情,還是僅與時間有關?快速搜索ICS source表明狀態欄狀態將在頂層應用程序窗口更改時重置。您是否在看到此行爲時致電StartActivity()或轉移到其他應用程序?

View.OnSystemUiVisibilityChangeListener接口已被綁定爲View.IOnSystemUiVisibilityChangeListener接口和通過View.SystemUiVisibilityChange事件。但是,這兩種機制都要求您的目標爲Android3.1或更高版本,因爲它會將您的//uses-sdk/@android:minSdkVersion屬性設置爲12,因此您(大概)不想這麼做。

我在這裏看到的兩種可能的解決方案:(?每Activity.OnCreate()方法中調用LightsOut()

  1. 弄清楚爲什麼LightsOn()被調用,並嘗試解決它。
  2. 提供您的應用的兩個版本,其中一個的minSdkVersion8,以及(至少)12之一,然後使用Multiple APK Support將兩者都包含在您的程序中。該設備將運行適當的包,允許訪問View.SystemUiVisibilityChange事件。
+0

謝謝。該應用只有一項活動,但視圖會定期顯示在前面。在3.1中這樣做會導致狀態欄重新顯示,顯然,按照您的鏈接。我在'BringToFront'後立即再次調用'LightsOut'並解決它。 – TheNextman 2012-02-28 14:04:41