Ответ 1
Я узнал, как получить прозрачную строку состояния на устройствах Samsung и Sony
работает хотя бы на Android 4.0.
Чтобы начать, позвольте мне объяснить, почему это невозможно на большинстве устройств:
С официальной стороны Android нет решения до KitKat (4.4).
Но некоторые производители устройств, такие как Samsung и Sony, добавили эту опцию в свое проприетарное программное обеспечение.
Samsung использует свою собственную версию Android, называемую TouchWiz, и Sony также использует свою собственную систему.
Они имеют собственную реализацию класса View
с дополнительными флагами SYSTEM_UI_
, которые позволяют включить прозрачную панель состояния на устройствах до 4.4!
Но единственный способ доказать существование этих флагов и доступ к ним - использовать Reflection.
Вот мое решение:
Разрешить флаг представления:
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());
}
}
Я думаю, что могут быть и другие производители устройств, которые реализовали такой флаг
но я смог узнать только эти два (потому что у меня есть Samsung и устройство Sony).