简单看下效果吧
最后更新,因为我发现方法一二有个小弊端,就是当有输入法的时候,关闭输入法会闪一下背景色再关闭,虽然很短,但是我是强迫症,所以建议直接使用方法三,且方法三是官方5.0出品,稳定,高效,也没有再见到那个闪一下背景色了,开心。
设置方法一:
1.首先在style.xml里面自定义一个TransparentBar
<style name="AppTheme.TransparentBar">
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
<item name="android:statusBarColor" tools:ignore="NewApi">@android:color/transparent</item>
</style>
2.然后这时候运行代码会发现状态栏和toolbar会重合一部分,所以还需要在最外层布局加上这两句来调整这个间距,
android:fitsSystemWindows="true"
android:clipToPadding="true"
3.这时候已经差不多ok了,不过运行代码会发现状态栏颜色不太对,因为这时候状态栏颜色已经是最外层的布局颜色了,所以为了整体效果,还需要在最外层加上和toolbar一样的颜色(或者设置任意你想要的颜色试试),
android:background="@color/colorPrimary"
4.同样为了达到理想效果,还需要给里面包裹的自己需要的布局加上UI给的颜色,白色或者什么,附上整个布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="center_horizontal"
android:fitsSystemWindows="true"
android:clipToPadding="true"
android:background="@color/colorPrimary"
android:orientation="vertical"
tools:context=".activity.LoginActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/id_toolbar"
app:title="Log in"
app:titleTextColor="@color/white"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<AutoCompleteTextView
android:id="@+id/atv_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:singleLine="true" />
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="6"
android:imeActionLabel="@string/action_login"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true" />
<Button
android:id="@+id/btn_login"
style="?android:textAppearanceSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/action_login"
android:textStyle="bold" />
<Button
android:id="@+id/btn_sign_up"
style="?android:textAppearanceSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/action_sign_up"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>
</LinearLayout>
方法二:
设置style.xml里的去掉title设定,
<item name="windowNoTitle">true</item>
其他的直接去java代码里设置;
在setContentView()后添加
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
其他步骤同方法一。
方法三:
1.先设置styles.xml,去掉系统title:
<style name="AppTheme.TransparentBar">
<item name="windowNoTitle">true</item>
</style>
2.然后加入代码:
/**
* 设置状态栏颜色
*/
Window window = getWindow();
//取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏颜色
window.setStatusBarColor(getColor(R.color.colorPrimary));
这几行代码可以放到BaseActivity里面,方便实用。
3.照样在最外层xml布局添加属性:
android:fitsSystemWindows="true"
android:clipToPadding="true"
方法说明,这个直接动态改变状态栏颜色的代码只支持android版本5.0后