我发现如何在至少运行Android 4.0的三星和索尼设备上
获得透明的状态栏。
首先,让我解释为什么在大多数设备上都不可能做到这一点:
从Android的官方方面来看,在KitKat(4.4)之前没有解决方案。
但是三星和索尼等一些设备制造商已经在其专有软件中添加了此选项。
三星使用他们自己的皮肤版本的Android,称为TouchWiz,索尼也在使用自己的系统。
他们有自己的类实现,带有额外的标志,允许在4.4之前的设备上启用透明的状态栏!View
SYSTEM_UI_
但是,证明这些标志存在并访问它们的唯一方法是使用反射。
这是我的解决方案:
解析视图标志:
int ResolveTransparentStatusBarFlag()
{
String[] libs = getPackageManager().getSystemSharedLibraryNames();
String reflect = null;
if (libs == null)
return 0;
for (String lib : libs)
{
if (lib.equals("touchwiz"))
reflect = "SYSTEM_UI_FLAG_TRANSPARENT_BACKGROUND";
else if (lib.startsWith("com.sonyericsson.navigationbar"))
reflect = "SYSTEM_UI_FLAG_TRANSPARENT";
}
if (reflect == null)
return 0;
try
{
Field field = View.class.getField(reflect);
if (field.getType() == Integer.TYPE)
return field.getInt(null);
}
catch (Exception e)
{
}
return 0;
}
将其应用于您的(在任何活动内):decorView
Window
void ApplyTransparentStatusBar()
{
Window window = getWindow();
if (window != null)
{
View decor = window.getDecorView();
if (decor != null)
decor.setSystemUiVisibility(ResolveTransparentStatusBarFlag());
}
}
我认为也许还有其他设备制造商已经实现了这样的标志
,但我只能弄清楚这两个(因为我拥有三星和索尼设备)