2012-02-27 1 views
1

Я разработал свое приложение с помощью Mono для Android. У меня последняя версия 4.0.3. Мой AndroidManifest.xml указывает:Honeycomb 3.1/Mono для Android persist 'LightsOut'

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

Приложение работает на таблетках, так и в Honeycomb мне нужно, чтобы скрыть строку состояния в нижней части экрана. Вот как я это делаю (с помощью простого метода расширения):

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 
      { } 
     } 

Я вызываю это во всех представлениях, которые я создаю. На моей Motorola Xoom, работающей с 3.0.1, это работает отлично.

На моей вкладке Galaxy Galaxy 3.1 работает; но строка состояния возвращается через некоторое короткое время. В Android Log я вижу, что LightsOn() получает вызов ...

Как я могу предотвратить появление строки состояния в 3.1? Я видел это событие:

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

И думал, что я мог бы использовать это, чтобы скрыть строку состояния, если он возвращается. Но я не понимаю, как я могу подписаться на него (это не показано в Intellisense).

ответ

2

Что-то конкретное происходит до того, как строка состояния вернется или связана только с ней? Быстрый поиск ICS source предполагает, что статус состояния будет сброшен при изменении верхнего окна приложения. Вы звоните StartActivity() или переходите в другое приложение, когда видите это поведение?

Интерфейс View.OnSystemUiVisibilityChangeListener был связан как интерфейс View.IOnSystemUiVisibilityChangeListener и через событие View.SystemUiVisibilityChange. Тем не менее, оба этих механизма требуют, чтобы ваш $(TargetFrameworkVersion) предназначался для Android v3.1 или новее, что установило бы ваш //uses-sdk/@android:minSdkVersion атрибут 12, и, таким образом, вы, что, по-видимому, не хотите делать.

Я вижу два возможных решения: здесь (? Называть LightsOut() внутри каждого Activity.OnCreate() метода)

  1. Выяснить, почему LightsOn() в настоящее время вызывается и попытаться работать вокруг него.
  2. Предоставьте две версии вашего приложения: одну с minSdkVersion из 8 и одну из (не менее) 12, а затем используйте Multiple APK Support, чтобы включить их в свою программу. Затем устройство запустит соответствующий пакет, разрешив доступ к событию View.SystemUiVisibilityChange.
+0

спасибо. Приложение имеет только одно действие, но просмотры регулярно выводятся на передний план. Выполнение этого в 3.1 приводит к тому, что строка состояния будет отображаться, по-видимому, по вашей ссылке. Я просто называю «LightsOut» снова сразу после «BringToFront», и это решает его. – TheNextman