Honeycomb 3.1 / Mono для Android сохраняются "LightsOut" - PullRequest
1 голос
/ 28 февраля 2012

Я разработал свое приложение, используя Mono для Android.У меня последняя версия 4.0.3.Мой AndroidManifest.xml указывает:

<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 это работает отлично .

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

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

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

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

1 Ответ

2 голосов
/ 28 февраля 2012

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

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

Здесь я вижу два вероятных решения:

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