Honeycomb 3.1 / Mono for Android坚持'LightsOut'

时间:2012-02-27 20:59:37

标签: android android-3.0-honeycomb xamarin.android

我使用Mono for 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 
            { }
        }

我在我实例化的每个视图上调用它。在我的摩托罗拉Xoom上,运行3.0.1,这可以很棒

在运行3.1的Samsung Galaxy Tab上,它可以工作;但状态栏在很短的时间后回来了。在Android日志中,我看到LightsOn()被调用...

如何阻止状态栏返回3.1?我看到了这个事件:

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

并且如果它回来的话,我认为我可以用它来隐藏状态栏。但我不知道如何订阅它(它没有在Intellisense中显示)。

1 个答案:

答案 0 :(得分:2)

在状态栏返回之前是否发生了特定的事情,还是只是时间相关?快速搜索ICS source表示状态栏状态将在顶部应用程序窗口更改时重置。您是否在看到此行为时调用StartActivity()或转移到其他应用程序?

View.OnSystemUiVisibilityChangeListener接口已绑定为View.IOnSystemUiVisibilityChangeListener接口并通过View.SystemUiVisibilityChange事件绑定。但是,这两种机制都需要您的$(TargetFrameworkVersion)目标Android v3.1或更高版本,这会将您的//uses-sdk/@android:minSdkVersion属性设置为12,因此您(可能)不会想做。

我在这里看到两个看似合理的解决方案:

  1. 找出调用LightsOn()的原因并尝试解决它(在每个LightsOut()方法中调用Activity.OnCreate()?)。
  2. 提供两个版本的应用,一个版本minSdkVersion8,另一个版本(至少)为12,然后使用Multiple APK Support将两者都包括在内你的计划。然后,设备将运行相应的包,允许访问View.SystemUiVisibilityChange事件。