Подтвердить что ты не робот

Прозрачная строка состояния - до Android 4.4 (KitKat)

Я знаю в Android 4.4 KitKat (API 19) можно сделать прозрачную панель состояния.

Но, например, Go Launcher Ex и другие имеют возможность сделать его прозрачным, и он работает над pre KitKat также для меня (Android 4.3 (Jelly Bean)), а также на моем Android 4.0 (Ice Cream Sandwich).

Мне не нужен root или какие-либо специальные привилегии для его использования.

Загрузите Go Launcher Ex и попробуйте сами. Для меня также было бы хорошо, если бы мне нужен root.

Но как они это сделали? Как я могу сделать панель состояния Android полупрозрачной на устройствах pre-KitKat?

--- Чтобы прояснить ситуацию ---

Я не говорю о панели действий; Я имею в виду строка состояния (панель уведомлений)!


см. эти примеры изображений:

(Обратите внимание, что это взято из моей галактической заметки 3 с Android 4.3 и Go Launcher Ex.)

(То же самое работает с моей Galaxy S2 и Android 4.0).

Без прозрачная строка состояния:

Without transparent bar (default)

Включена прозрачная строка состояния: (Я хочу достичь этого на устройствах с предустановленным 4.4 (API 19))

With transparent status bar (what I want to achieve on pre 4.4 devices in any way

4b9b3361

Ответ 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).