`
bogongjie
  • 浏览: 235033 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Android改变状态栏statusbar背景色

 
阅读更多

Android开发中在某些界面为了保证显示一致性,可能需要调整statusBar的背景色,本文介绍了Android 4.4(API 19)和Android 5.0以上修改statusBar背景色的方案。其中5.0只需要修改styles.xml文件就可以修改statusbar背景色,而4.4使用了 Toolbar来替代ActionBar的方案。

support-v7-appcompat在21版本之后做了很多修改,所以首先保证你的v7包在21以上。如果没有,请在Android Manager把v7包升级到该版本,或者在Android Studio gradle中如下:

dependencies {
    compile 'com.android.support:appcompat-v7:21.1.+'
}

 

1、修改styles.xml文件

<!-- 这个是给5.0使用的Style,其实完全可以在源代码中加判断这样就不需要多个style文件-->
<style name="AppTheme" parent="Theme.AppCompat">
        <item name="android:textColorPrimary">#000000</item>
        <item name="colorPrimary">#ff0000</item>
        <item name="colorPrimaryDark">#00ff00</item>
        <item name="colorAccent">#0000ff</item>
        <!-- Customize your theme here. -->
    </style>
    <!-- 这个是给4.4使用的Style,其实完全可以在源代码中加判断这样就不需要多个style文件-->
    <style name="AppThemeNoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:textColorPrimary">#000000</item>
        <item name="colorPrimary">#ff0000</item>
        <item name="colorPrimaryDark">#00ff00</item>
        <item name="colorAccent">#0000ff</item>
        <item name="android:windowTranslucentStatus" tools:targetApi="19">true</item> #这句话是关键,状态栏透明
        <!-- Customize your theme here. -->
    </style>

 

 这张图对应的是AppCompat中Item对应的修改的位置。其中的colorPrimaryDark就是修改状态栏的颜色。
在5.0的手机上,在源代码中使用Activity extends ActionbarActivity或者AppCompatActivity,把style/AppTheme应用到该activity即可。

好了,到目前位置,我们已经完成了修改状态栏的颜色,不过很遗憾,这些只在5.0以上的设备上才生效,在4.4或者以下的手机上,状态栏仍然是黑色。

接下来,我们看support v7包中的一个组件Toolbar,很多文档中,已经开始使用Toolbar来替换ActionBar,因为ActionBar虽然起到了规范界面风格的效果,但是限制了诸多特性,而与之相比,Toolbar则更灵活。

android.support.v7.widget.Toolbar;

 让我们在layout中为Toolbar单独建立一个layout_toolbar.xml,方便其他页面include使用:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#00ff00"
    android:minHeight="?attr/actionBarSize"
    android:fitsSystemWindows="true">

</android.support.v7.widget.Toolbar>

 在其他Activity的layout中include上面的Toolbar,比如activity_splash中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"  tools:context=".SplashActivity">
    <include layout="@layout/layout_toolbar" android:id="@+id/activity_toolbar"/>

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/activity_toolbar"/>

</RelativeLayout>

 在SplashActivity中使用这个layout:

public class SplashActivity extends AppCompatActivity {
    private Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        toolbar = (Toolbar) findViewById(R.id.activity_toolbar);
        setSupportActionBar(toolbar);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_splash, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

 关键就是这两句话
toolbar = (Toolbar) findViewById(R.id.activity_toolbar);
setSupportActionBar(toolbar);

把Toolbar应用到ActionBar的位置。
在Manifest文件中为该Activity使用style/AppThemeNoActionBar

 <activity android:name="com.yan.basic.gui.SplashActivity"
            android:theme="@style/AppThemeNoActionBar">

        </activity>

 运行后,你会发现状态栏不在是黑色,而是和Toolbar类似的渐变色

 

  • 大小: 62.2 KB
分享到:
评论

相关推荐

    Android4.4之后改变状态栏statusbar背景色

    "Android4.4之后改变状态栏statusbar背景色"这个主题正是关于如何在4.4及更高版本的Android系统中更改状态栏的颜色,以适应应用的设计风格或者提高用户体验。 在Android API 19(KitKat)之后,开发者可以通过设置...

    android修改状态栏背景颜色、字体颜色,隐藏状态栏,状态栏透明

    本教程将详细讲解如何修改状态栏的背景颜色、字体颜色,如何隐藏状态栏以及如何实现状态栏透明。 1. **修改状态栏背景颜色** 在Android 5.0(API Level 21)及以上版本,我们可以使用`setStatusBarColor()`方法来...

    Android自定义状态栏颜色与应用标题栏颜色一致

    在Android开发中,为了让应用的用户体验更加统一和美观,有时我们需要自定义状态栏的颜色,使其与应用的标题栏颜色保持一致。在iOS系统中,这种效果很常见,但早期的Android版本并不支持这一特性。不过,从Android ...

    改变statusbar的背景总结

    在Android应用开发中,改变status bar(状态栏)的背景是一项常见的需求,特别是在追求个性化界面设计和提升用户体验的过程中。本文将深入探讨如何使用Kotlin语言在Android 4.4(KitKat)及以上版本中实现status bar...

    Android-Android改变状态栏颜色状态栏透明

    总的来说,改变Android状态栏颜色和实现透明效果主要涉及对状态栏主题的定制、Java代码的动态控制以及对不同Android版本的兼容处理。通过不断学习和实践,开发者可以更好地掌控这些技术,提升应用的视觉体验。

    Android 沉浸式状态栏(亲测好用)

    1. 普通沉浸式状态栏:在这种模式下,状态栏的颜色会与应用的主题色或背景色融为一体,给人一种无边界的视觉效果。例如,系统默认的浅色或深色主题可以轻松实现此效果。 2. 图片沉浸式状态栏:对于含有复杂背景图像...

    Android 改变系统状态栏颜色和字体

    在Android 6.0(Marshmallow)及以上版本,可以通过`SYSTEM_UI_FLAG_LIGHT_STATUS_BAR`标志切换状态栏字体颜色,使其与背景颜色对比鲜明。例如: ```java if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M) { ...

    Android实现状态栏(statusbar)渐变效果的示例

    finally,作者使用 addOnLayoutChangeListener 监听布局变化,来保证状态栏背景颜色的变化: ```java getWindow().getDecorView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override ...

    android状态栏和主界面融为了一体

    在Android开发中,状态栏(StatusBar)是手机或平板设备屏幕顶部显示系统信息的区域,如时间、电量、网络状态等。...通过研究和实践,开发者可以更好地理解和掌握Android状态栏的相关操作,提升应用的用户体验。

    android状态栏一体化,沉浸式状态栏,状态栏管理类

    总结,Android状态栏一体化和沉浸式状态栏技术提升了应用的美观性和用户体验,而`SystemStatusManager`类则提供了便捷的接口,帮助开发者轻松实现这些功能,降低了代码复杂度,提高了开发效率。

    qtstatusbar:Qt的StatusBar允许在Android和iOS上设置状态栏的颜色和主题

    `qtstatusbar`项目不仅提供了基本的颜色和主题设置,还可能包括其他高级功能,如自定义图标、动态改变状态栏状态等。开发者可以根据具体需求,查阅项目的文档或源码以获取更多信息。 总结来说,`qtstatusbar`是Qt...

    Android 之 沉浸式状态栏及顶部状态栏背景色设置.txt

    在Android应用开发过程中,为了提供更好的用户体验以及界面美观性,开发者往往需要对应用的状态栏进行定制化处理,如实现沉浸式状态栏效果或者改变状态栏的背景颜色。本文将详细介绍如何在Android应用中实现这些功能...

    Android轻松实现沉浸式/透明式状态栏

    - 在使用透明状态栏时,确保背景颜色与状态栏颜色的对比度足够,以免影响可读性。 - 考虑到不同设备和屏幕尺寸,进行充分的测试以确保兼容性。 - 对于某些特殊设备或系统,可能需要额外的适配代码。 通过以上...

    Android有效获取状态栏(StatusBar)高度的方法

    在Android应用开发中,有时我们需要根据界面需求对状态栏(StatusBar)进行自定义处理,比如全屏显示或者在状态栏下方添加特殊的背景色。这时,了解如何有效地获取状态栏高度就显得尤为重要。本文将详细讲解如何在...

    Android状态栏着色代码

    为了让应用界面更具整体感和沉浸式体验,开发者通常会为状态栏设置自定义颜色,这就是“Android状态栏着色”的概念。本文将详细介绍如何在Android应用中实现状态栏着色。 一、API版本差异 在Android的不同版本中,...

    Android之简单的实现透明状态栏

    需要注意的是,当状态栏透明时,通常还需要处理状态栏的文字和图标颜色,确保它们在透明背景下仍清晰可见。这可以通过`SYSTEM_UI_FLAG_LIGHT_STATUS_BAR`标志来实现,使得状态栏图标变为白色。当然,具体实现可能...

    android透明状态栏

    例如,对于一些老版本的设备,可能需要使用第三方库如`android-translucent-status-bar`来实现透明状态栏。此外,不同的设备厂商可能有自己的定制系统,因此在测试时应确保覆盖多种设备和Android版本。 最后,透明...

    Android状态栏透明化

    下面我们将详细探讨如何实现Android状态栏的透明化。 首先,我们需要理解Android的状态栏。状态栏是手机屏幕顶部显示系统信息(如时间、网络信号、电量等)和通知的地方。在早期的Android版本中,状态栏通常是...

    改变状态栏颜色

    在开发过程中,确保在多种设备和Android版本上进行测试,确保状态栏颜色改变功能在各种情况下都能正常工作。此外,还要注意在不同应用权限下,状态栏颜色的显示效果,例如在后台运行或锁屏状态下。 通过以上步骤,...

Global site tag (gtag.js) - Google Analytics