隐藏标题栏

先看一下默认的情况:

85c66cde2b5f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

蓝色一行是自定义的导航栏,

黑色的是自带的 ActionBar ,也就是我们说的标题栏。

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

85c66cde2b5f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

隐藏 actionbar 有很多种方法

直接在AndroidManifest.xml中,全局的改动 app 的主题

下的

android:theme="@style/Theme.AppCompat.Light.NoActionBar"

85c66cde2b5f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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 中添加

...

false

true

@android:color/transparent

...

或者在 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 没有,那两者切换的时候会不好看。

融合的效果:

85c66cde2b5f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

状态栏和 app 顶部相融合了,如果标题栏是一张图片效果会更好。

这里还有一个问题,状态栏的文字和我们导航栏的文字重叠了,

我们可以选择在布局文件的根元素中添加:

android:fitsSystemWindows="true"

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

改变状态栏的颜色

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

false

false

#3EC5FF

85c66cde2b5f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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));

}

完全去掉状态栏

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

85c66cde2b5f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

完全隐藏状态栏

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

true

true

或者在 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"

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐