我使用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中显示)。
答案 0 :(得分:2)
在状态栏返回之前是否发生了特定的事情,还是只是时间相关?快速搜索ICS source表示状态栏状态将在顶部应用程序窗口更改时重置。您是否在看到此行为时调用StartActivity()
或转移到其他应用程序?
View.OnSystemUiVisibilityChangeListener
接口已绑定为View.IOnSystemUiVisibilityChangeListener接口并通过View.SystemUiVisibilityChange事件绑定。但是,这两种机制都需要您的$(TargetFrameworkVersion)
目标Android v3.1或更高版本,这会将您的//uses-sdk/@android:minSdkVersion
属性设置为12
,因此您(可能)不会想做。
我在这里看到两个看似合理的解决方案:
LightsOn()
的原因并尝试解决它(在每个LightsOut()
方法中调用Activity.OnCreate()
?)。minSdkVersion
为8
,另一个版本(至少)为12
,然后使用Multiple APK Support将两者都包括在内你的计划。然后,设备将运行相应的包,允许访问View.SystemUiVisibilityChange
事件。