当前位置: 首页 > 知识库问答 >
问题:

透明状态栏——Android 4.4(KitKat)之前的版本

漆雕皓轩
2023-03-14

我知道在Android 4.4 KitKat(API 19)中,状态栏是透明的。

但例如,Go Launcher Ex和其他公司可以选择使其透明,对我来说,它也在进行预KitKat(Android

我不需要root或任何特权来使用它。

下载Go Launcher Ex并亲自试用。对我来说,如果我需要根也可以。

但他们是怎么做到的?如何在KitKat之前的设备上使Android的状态栏透明?

---澄清事情---

我不是在说动作条;我指的是状态栏(通知栏)!

请看以下图片:

(注意,这是我的股票Galaxy Note 3和Android 4.3以及Go Launcher Ex。)

(我的Galaxy S2和Android4.0也同样适用。)

没有透明的状态栏:

启用透明状态栏:(我想在4.4(API 19)之前的设备上实现这一点)

共有2个答案

栾瑞
2023-03-14

用这个。:)

在super()之后和设置内容之前。

if (Build.VERSION.SDK_INT >= 19)
{
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21)
{
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true);
}

if (Build.VERSION.SDK_INT >= 21)
{
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false);
    getWindow().setStatusBarColor(Color.TRANSPARENT);
}


public static void setWindowFlag(Activity activity, final int bits, boolean state)
{
    Window win = activity.getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();

    if (state)
     {
        winParams.flags |= bits;
    }
     else
     {
        winParams.flags &= ~bits;
    }
}
欧镜
2023-03-14

我发现了如何在至少运行Android4.0的三星和索尼设备上获得透明的状态栏。

首先,让我解释一下为什么在大多数设备上都不可能做到这一点:
从Android的官方角度来看,在KitKat(4.4)之前没有解决方案<但是一些设备制造商,比如三星和索尼,已经在他们的专有软件中添加了这个选项。

三星使用自己的Android外皮版TouchWiz,索尼也在使用自己的系统
他们有一个自己的视图类实现,带有额外的系统_UI u标志,允许在4.4之前的设备上启用透明状态栏!

但证明这些标志存在并访问它们的唯一方法是使用反射
以下是我的解决方案:

解析视图标志:

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;
}

将其应用于您的Windows(在任何活动中)的装饰视图

void ApplyTransparentStatusBar()
{
    Window window = getWindow();
    if (window != null)
    {
        View decor = window.getDecorView();
        if (decor != null)
            decor.setSystemUiVisibility(ResolveTransparentStatusBarFlag());
    }
}

我想可能还有其他设备制造商已经实现了这样的标志
,但我只能弄清楚这两个(因为我拥有三星和索尼设备)

 类似资料:
  • 我目前正在手机上运行Kitkat(4.4.2),并安装了一个应用程序。 在该应用程序中,状态栏是透明的,并在其下方显示应用程序的内容。请看图片。 图片1 图2 我应该如何在我的程序中做到这一点。 提前感谢。

  • 在“新”Android4.3版中有一个新功能。屏幕顶部的状态栏在launcher中是透明的(我在Galaxy S3上使用三星TouchWiz),在其他一些应用中也是透明的(看起来有点像iOS 7风格)。你能告诉我如何在我自己的应用程序(Eclipse、Java)中使状态栏透明(或彩色)吗?

  • 我使用以下布局(main_activity.xml) 具有以下样式-v21 但我仍然无法归档一个透明的状态栏 看起来像这样 但我想要这样的东西(新谷歌报摊App) 注意:我正在使用

  • 有人知道如何使用React Native使Android状态栏透明吗? 不透明,透明。 我也在使用react导航。

  • 我的styles.xml: 我能做的是:

  • 我想整合一些像这样的东西: 我已经这样做了,但是我似乎不能把图像视图放在工具栏下面。没有工具栏,我可以在状态栏下制作,但是把这两者结合起来是不可能的。 这是我的布局: 在我的活动中,我做了以下工作: 我还声明了一个 styles-v21.xml 文件: 并将其设置为Photo活动的默认样式。我已经尝试将工具栏放在FrameLayout中,但这样做我的工具栏只会隐藏,如下所示: 提前感谢。 已修复,