【问题标题】:Android, Call API 14 method but should stay compatible with API 4Android,调用 API 14 方法,但应与 API 4 保持兼容
【发布时间】:2012-05-13 23:42:23
【问题描述】:

如果设备正在运行 ICS,我想隐藏状态栏:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);

View.SYSTEM_UI_FLAG_LOW_PROFILE 参数是在 Android API 14 中定义的。

我的清单现在是:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" />

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >

然后它崩溃了:

java.lang.NoSuchMethodError: android.view.View.setSystemUiVisibility

如何调用此方法并使其与 API 级别较低的 Android 设备兼容?

【问题讨论】:

  • 检查 api 级别并仅在 api >= 14 并且在较低的 api 请求全屏时调用该方法。支持 api 4 真的没有必要恕我直言
  • 感谢 WarrenFaith,没想到这一点。 [Build.VERSION.SDK_INT > 11] 效果很好!
  • 请注意,它在 Android 2.0 及更高版本上“效果很好”。在 Android 1.x 上,您需要做更多的事情来避免VerifyError
  • 大声笑,是的。但是 minSdkVersion 是 4 ;-)

标签: android android-4.0-ice-cream-sandwich statusbar


【解决方案1】:

您可以通过使用获取版本

int SDK_INT = android.os.Build.VERSION.SDK_INT;

你可以在设置参数之前检查版本

if(SDK_INT >= 11 && SDK_INT < 14) {
        getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
    }else if(SDK_INT >= 14){
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
    }

【讨论】:

  • View.STATUS_BAR_HIDDEN 是 API 11。您仍然会在 API 10 及更低版本上崩溃
  • 最好的做法是 import static android.os.Build.VERSION.SDK_INT;而不是 int SDK_INT = android.os.Build.VERSION.SDK_INT;
  • 如何避免java.lang.NoSuchMethodError: android.view.View.setSystemUiVisibility?您仍在使用此方法在没有此方法的 API 级别上加载代码。同样的字段STATUS_BAR_HIDDEN
  • 如果您愿意,也可以使用 Build.VERSION_CODES 代替硬编码的 SDK 整数。
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多