首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android完全透明的状态栏?

Android完全透明的状态栏?
EN

Stack Overflow用户
提问于 2015-03-28 06:15:21
回答 30查看 294.5K关注 0票数 233

我已经搜索了文档但只找到了这个:链接..。它是用来制作条的半透明什么?我要做的就是让状态栏完全透明(如下图所示),并使其向后兼容APK<19:

我的styles.xml:

代码语言:javascript
复制
  <item name="android:actionBarStyle">@style/ThemeActionBar</item>
  <item name="android:windowActionBarOverlay">true</item>
  <!-- Support library compatibility -->
  <item name="actionBarStyle">@style/ThemeActionBar</item>
  <item name="windowActionBarOverlay">true</item>
  

  
  <item name="android:background"> @null </item>
  <!-- Support library compatibility -->
  <item name="background">@null</item>
  <item name="android:displayOptions"> showHome | useLogo</item>
  <item name="displayOptions">showHome|useLogo</item>

我能做的是:

EN

回答 30

Stack Overflow用户

回答已采纳

发布于 2015-03-28 06:38:01

你所需要做的就是在你的主题中设置这些属性:

代码语言:javascript
复制
true
true

您希望具有透明状态栏的活动/容器布局需要此属性设置:

代码语言:javascript
复制
android:fitsSystemWindows="true"

通常不可能在pre-kitkat上确定执行此操作,看起来您可以做到这一点

但是一些奇怪的代码让它变得如此..。

编辑:我推荐这个库:

https://github.com/jgilfelt/SystemBarTint用于很多前棒棒糖状态栏的颜色控制。

经过深思熟虑后,我了解到,要完全禁用棒棒糖的半透明或状态栏和导航栏上的任何颜色,答案是在窗口上设置此标志:

代码语言:javascript
复制
// In Activity's onCreate() for instance
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window w = getWindow();
    w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

没有其他的主题是必要的,它会产生类似这样的结果:

票数 447
EN

Stack Overflow用户

发布于 2018-02-15 18:26:25

只需将这行代码添加到您的主java文件中:

代码语言:javascript
复制
getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
);
票数 35
EN

Stack Overflow用户

发布于 2020-01-18 15:27:20

您可以使用下面的代码使状态栏透明。请参阅红色突出显示的图像,帮助您识别以下代码的用法

用于android应用程序的Kotlin代码片段

步骤:1在create方法中写下代码

代码语言:javascript
复制
if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
    setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true)
}
if (Build.VERSION.SDK_INT >= 19) {
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
if (Build.VERSION.SDK_INT >= 21) {
    setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false)
    window.statusBarColor = Color.TRANSPARENT
}

Step2:你需要在下面的代码中描述的SetWindowFlag方法。

代码语言:javascript
复制
private fun setWindowFlag(bits: Int, on: Boolean) {
    val win = window
    val winParams = win.attributes
    if (on) {
        winParams.flags = winParams.flags or bits
    } else {
        winParams.flags = winParams.flags and bits.inv()
    }
    win.attributes = winParams
}

android应用程序的Java代码片段:

Step1:主要活动代码

代码语言:javascript
复制
if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true);
}
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 >= 21) {
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false);
    getWindow().setStatusBarColor(Color.TRANSPARENT);
}

Step2:SetWindowFlag方法

代码语言:javascript
复制
public static void setWindowFlag(Activity activity, final int bits, boolean on) {
    Window win = activity.getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    if (on) {
        winParams.flags |= bits;
    } else {
        winParams.flags &= ~bits;
    }
    win.setAttributes(winParams);
}
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29311078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档