Android中的半透明状态栏
Posted
技术标签:
【中文标题】Android中的半透明状态栏【英文标题】:Translucent status bar in Android 【发布时间】:2017-07-07 21:24:16 【问题描述】:我正在使用以下布局 (main_activity.xml)
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:fitsSystemWindows="true">
<android.support.v4.widget.NestedScrollView
android:layout_
android:layout_
android:fitsSystemWindows="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:layout_
android:layout_
android:layout_margin="@dimen/text_margin"
android:fitsSystemWindows="true"
android:text="@string/large_text" />
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
具有以下样式-v21
<resources>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
</resources>
但我仍然无法存档透明状态栏
看起来像这样
但我想要这样的东西(新的 Google 报亭应用)
注意:我正在使用
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.android.support:support-v4:25.1.1'
compile 'com.android.support:design:25.1.1'
【问题讨论】:
查看link 【参考方案1】:试试这个:
将此添加到您的应用主题中:
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
将android:fitsSystemWindows=”true”
设置为根容器
现在在您的活动中 onCreate():
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);
更新,结果:
您可以让snackbar
在屏幕顶部绘制:
Snackbar snack = Snackbar.make(parentLayout, str, Snackbar.LENGTH_LONG);
View view = snack.getView();
FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams();
params.gravity = Gravity.TOP;
view.setLayoutParams(params);
snack.show();
更多信息请见here
【讨论】:
我想吻你。非常感谢,完美运行 看看这个答案:***.com/questions/33354791/… 我只希望在一个活动中使用它。我怎样才能实现?【参考方案2】:@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(Color.TRANSPARENT);
在您的活动中使用它。但是只有在android L之后才允许更改状态栏颜色
【讨论】:
尝试从您正在使用的样式中移除状态栏颜色 已移除,现在是灰色,不透明。 rafsanahmad0007 的解决方案有效,但感谢所有帮助。 好吧,对你有好处..享受。这段代码也可以工作。我测试过,看起来不错 非常感谢你。这是适用于 android 5.0 的唯一答案【参考方案3】:下面的代码使 API21+ 的状态栏透明但导航栏不透明。
注意:您不应该设置android:fitsSystemWindows="true"
。
override fun onCreate(savedInstanceState: Bundle?)
setupContentWindow()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fun setupContentWindow()
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = Color.TRANSPARENT
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
【讨论】:
这很完美,因为它使状态栏透明但导航栏不透明【参考方案4】:在你希望其布局状态栏透明的Activity的onCreate中添加这两行
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
getWindow().setStatusBarColor(Color.TRANSPARENT);
无需更改您的应用主题或 xml 布局。如果您不想这样做,您的栏不必在整个应用程序中保持透明。
【讨论】:
这是正确答案。所有其他答案都将“透明状态栏”误认为“无状态栏”。 应该像if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) getWindow().setStatusBarColor(Color.TRANSPARENT);
因为setStatusBarColor
需要最低棒棒糖版本【参考方案5】:
似乎有些人的状态栏是灰色而不是透明的。为避免此问题,请在您的活动中执行以下操作:
override fun onCreate(savedInstanceState: Bundle?)
...
window.apply
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
statusBarColor = Color.TRANSPARENT
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
【讨论】:
非常感谢!【参考方案6】:请从您的 CoordinatorLayout 中删除此行:
android:fitsSystemWindows="true"
已编辑, 结果:
【讨论】:
已移除,现在是灰色,但不透明 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 在您的活动中使用上述行。 我不想要全屏,我想要一个透明的状态栏,就像上面(Play Newsstand)的图片以上是关于Android中的半透明状态栏的主要内容,如果未能解决你的问题,请参考以下文章
利用 Android 4.4 KitKat 中的半透明状态栏
Material Design 中呈现的 Android Lollipop 上的半透明渐变状态栏
Android 4.4 — 半透明状态/导航栏 — fitSystemWindows/clipToPadding 不能通过片段事务工作