android工具栏设为底层,Android 隐藏底部工具栏

这篇博客详细介绍了在Android应用中如何隐藏底部工具栏,包括在Activity和Dialog中实现全屏的方法。作者指出,隐藏工具栏可以通过View对象的setSystemUiVisibility方法来实现,并且在Dialog弹出和消失时可能出现底部工具栏闪烁的问题。为了解决这个问题,作者建议在Dialog显示和隐藏时调整焦点。同时,文中也提及了悬浮窗与全屏Dialog的交互问题。
摘要由CSDN通过智能技术生成

隐藏底部工具栏只有在能获取到Window的地方才能实现,比如果activity,dialog等

在activity中隐藏底部工具栏的方法

隐藏底部工具栏可以在任意的界面对象中实现,dialog,悬浮窗,等等,只要有view对象就可以。

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//底部状态栏位置消失,但是状态栏还是存在

// getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);//底部状态栏位置消失,但是状态栏还是存在

// getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);//底部状态栏位置消失,但是状态栏还是存在

//这种方法也行,但是要在Android 4.0以上才能生效

// getWindow().getDecorView().setSystemUiVisibility(

// View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

// | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

// | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

//取消标题

requestWindowFeature(Window.FEATURE_NO_TITLE);

//取消状态栏

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

WindowManager.LayoutParams.FLAG_FULLSCREEN);

//隐藏虚拟按键(底部工具栏),并且全屏

if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api

View v = this.getWindow().getDecorView();

v.setSystemUiVisibility(View.GONE);

} else if (Build.VERSION.SDK_INT >= 19) {

//for new api versions.

View decorView = getWindow().getDecorView();

int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;

decorView.setSystemUiVisibility(uiOptions);

}

}

在oncreate隐藏这个是没有问题,但是当我们需要弹出dialog(也调用了隐藏工具栏的方法)的时候,底部工具栏就会重新出现然后消失,dialog消失的时候,底部工具栏会再次出现,activity隐藏底部工具栏的设置就会失效,那我们就需要在焦点变化的时候调用。

@Override

public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

if (hasFocus) {

getWindow().getDecorView().setSystemUiVisibility(

View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

}

}

这样底部工具栏的设置就不会失效了。但是,在dialog出现和隐藏的瞬间,底部工具栏都会出现,很尴尬的问题,我慢慢再找解决方法吧,现在我是用悬浮窗代替一些不是全屏的dialog。

提一下

如果需要全屏的悬浮窗的时候,我们是不能隐藏工具栏占用的区域的,因为悬浮窗没有window对象,所以我现在把有问题的全屏悬浮窗都改成了dialog。

一知半解真可怕,只会看博客,不自己看源码钻研真是尴尬,哎,是我理解错了,在隐藏底部工具栏的时候是通过调用setSystemUiVisibility(int)这个方法,这个方法我一直以为是window的方法。。。。其实是view的方法,那这样的话,我们就可以使用一个界面里的任意一个view对象调用此方法了。也就不会出现所谓的悬浮窗不能隐藏底部工具栏的问题了。只会复制,不认真看代码是一个非常非常蠢得行为!

遗留问题:

dialog显隐的时候,底部工具栏会出现一瞬间的闪现。(可以使用悬浮窗带滴dialog,但是没有解决根本问题)

问题解决:

在activity中打开dialog时,底部状态栏会出现然后消失。这个问题的解决是在dialog显示之前将dialog的焦点失能,然后在显示之后清理失能焦点。

public void show(String type,String mes){

//失能焦点

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,

WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);

super.show();

//清理失能焦点

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值