美文网首页
Android 状态栏的设置

Android 状态栏的设置

作者: chauI | 来源:发表于2016-11-14 14:56 被阅读242次

隐藏标题栏

先看一下默认的情况:

Paste_Image.png

蓝色一行是自定义的导航栏,
黑色的是自带的 ActionBar ,也就是我们说的标题栏。

首先一般都会选择去掉 ActionBar:

Paste_Image.png

隐藏 actionbar 有很多种方法

  • 直接在AndroidManifest.xml中,全局的改动 app 的主题
    <application>下的
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
AndroidManifest

这种方法是全局中隐藏了标题栏。

  • 在 OnCreat() 中加入
    注意要加在 setContentView() 的前面
    这种方法可以指定 Activity 设置
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 隐藏标题栏
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    
    setContentView(R.layout.activity_news);
}

其实在我的手机更新系统之前,隐藏了 ActionBar 后,状态栏和自定义的导航栏颜色是相匹配的,不知道什么原因现在默认为灰色了。

状态栏相融

上面使用的主题虽然隐藏了标题栏,但是和我们自定义的导航栏不搭,
这时候我们可以选择用自定义的主题(Theme),来改变状态栏:

在 values 下的 style.xml 中添加

<resources>
...
    <style name="MTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
...
</resources>

或者在 onCreate 中:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                    ,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
                    ,WindowManager.LayoutParams.FLAG_FULLSCREEN);

上面两行一般不一起设置,二选一即可。
第一行设置导航栏为透明,第二行将导航栏隐藏。
不推荐第二种做法,如果一个 Activity 中设置了隐藏导航栏而另一个 Activity 没有,那两者切换的时候会不好看。

融合的效果:


Paste_Image.png

状态栏和 app 顶部相融合了,如果标题栏是一张图片效果会更好。
这里还有一个问题,状态栏的文字和我们导航栏的文字重叠了,
我们可以选择在布局文件的根元素中添加:

android:fitsSystemWindows="true"

让布局为状态栏留出空间,就不会出现上面这张被状态栏遮挡的情况。

改变状态栏的颜色

如果像上面的例子是一样的纯色的标题栏,我们可以选择直接改变状态栏的颜色解决问题。

<resources>
    <style name="ColorTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowTranslucentNavigation">false</item>
        <item name="android:statusBarColor">#3EC5FF</item>
    </style>
</resources>
Paste_Image.png

或者:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = this.getWindow();
    //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    //设置状态栏颜色
    window.setStatusBarColor(getResources().getColor(R.color.blueDark));
}

完全去掉状态栏

不显示时间、电量等信息和文字:

完全隐藏状态栏

同要可以用修改 Theme 来实现:

<style name="ImageTranslucentTheme">
    <!-- 隐藏状态栏 -->
    <item name="android:windowFullscreen">true</item>
    <!-- 隐藏标题栏 -->
    <item name="android:windowNoTitle">true</item>
</style>

或者在 OnCreat() 中加入,还是要注意加在 setContentView() 的前面

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 隐藏标题栏
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    // 隐藏状态栏
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity_news);
}

如果想让图片全屏要注意设置为:

android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
//android:scaleType="fitXY"

相关文章

  • 沉浸式

    google在Android4.4以后提供了设置沉浸式状态栏的方法 true 设置状态栏为透明android:fi...

  • Android这是一些花里胡哨的

    状态栏 StatusBarUtil★3046 - 为Android应用设置状态栏 StatusBarCompat★...

  • Android 沉浸式风格(为毛叫沉浸式这么唬人)

    一、参考 1、Android 沉浸式状态栏攻略 让你的状态栏变色吧2、android设置状态栏颜色(沉浸式状态栏)...

  • 2018-11-20透明式状态栏

    通过设置 Theme 主题设置状态栏透明 因为 API21 之后(也就是 android 5.0 之后)的状态栏,...

  • Android设置状态栏的颜色

    Android设置状态栏的颜色 准确的是说是Android 5.0以后设置状态栏的颜色 第一种方式 自定义styl...

  • 沉浸式设计

    Android 4.4(19)设置沉浸式状态栏1、通过主题的方式 2、通过代码的方式设置 Android 5.0(...

  • 沉浸式效果

    Android 5.0 设置状态栏全透明,将布局顶到status bar上 StatusBarUtil 状态栏工具...

  • Android设置状态栏颜色Android4.4

    Android设置状态栏的颜色的方法在学习ToolBar的时候已经学会了:见以下链接结合Toolbar设置状态栏颜...

  • Flutter 开发常见 tips

    1.Android 手机设置状态栏透明 如果想实现在 Android 手机上实现透明状态栏的需求,可以在 main...

  • flutter备忘录

    圆角按钮 屏幕宽高 Container的width、height Android状态栏去掉背景 设置状态栏文字颜色...

网友评论

      本文标题:Android 状态栏的设置

      本文链接:https://www.haomeiwen.com/subject/hdnhyttx.html