我使用以下代码隐藏状态栏全屏的目的:
void HideEverything(){
if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();
}
}
它以全屏模式显示屏幕,但当我触摸状态栏时,它会显示状态栏。我尝试了其他选项来添加应用程序中的全屏主题和无标题栏主题,以及清单中的活动级别,但结果仍然相同…:(
我不想在任何一步显示状态栏。如何在android中实现这一点?
编辑:
Android OS版本是4.4.2(上面的代码在4.3上运行,但在4.4.2上不运行)
更新:
问题已经解决了。。。答案分别写在下面。。。
使用下面的代码,你可以使用全屏;
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
在setcontentview上面写下面的代码。
注意:本次活动不要给任何主题。
希望这有帮助。
我们无法阻止状态在kitkat或更高版本的设备中以全屏模式出现,因此请尝试黑客攻击以阻止状态栏扩展。
对于一个想法,在状态栏上放一个覆盖层,并消耗所有输入事件。这将阻止状态栏扩展。
由于Android版本是4.4.2,所以没有解决方案可以解决这个问题。
正如@Academy of Programmer评论的那样;此解决方案不适用于Android 6及以上版本。
但是根据Sunny的建议,问题已经通过阻止状态栏的扩展得到了解决。
解决方案是:
在主要活动中编写一个内联customViewGroup
类。
public class customViewGroup extends ViewGroup {
public customViewGroup(Context context) {
super(context);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.v("customViewGroup", "**********Intercepted");
return true;
}
}
现在,在main活动的
onCreate
方法中,在setContentView()之前添加以下代码:
WindowManager manager = ((WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE));
WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
localLayoutParams.gravity = Gravity.TOP;
localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
// this is to enable the notification to receive touch events
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
// Draws over status bar
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
localLayoutParams.height = (int) (50 * getResources()
.getDisplayMetrics().scaledDensity);
localLayoutParams.format = PixelFormat.TRANSPARENT;
customViewGroup view = new customViewGroup(this);
manager.addView(view, localLayoutParams);
上面的代码将禁用状态栏的扩展。现在按照代码制作全屏,将其添加到上面代码的正下方和
setContentView
之前:
//fullscreen
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
现在在清单中添加权限:
<!-- prevent expanding status bar -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
你就完了……)
缺点:此代码禁用设备状态栏的扩展,而不仅仅是活动或应用程序,所以如果您真的需要它,请使用它。
感谢您提供的所有解决方案和建议……:)
我正在制作一个Android锁屏应用程序。我的问题是状态栏。我在Androidanifest.xml上写了这一行。Android:主题="@Android:风格/主题。NoTitleBar。全屏"但是用户可以在没有应用程序的情况下滚动状态栏并解锁手机。那么如何完全隐藏状态栏呢?
问题内容: 如何在ios 9中隐藏状态栏? 现在不推荐使用: 问题答案: 斯威夫特3 更改为 删除 更改为 之所以可行,是因为计算变量具有getter函数,因此您之前实现的函数只是变成了getter函数 2016年起:简单的事物 在您的info.plist上,为statusBar隐藏添加以下两个属性 查看基于控制器的状态栏外观(布尔值:否) 状态栏最初是隐藏的(布尔值:是) 按来源 要么 旧答案!
我们正在为老年人开发一个启动应用程序,它有一个非常简单的用户界面,我们不想显示状态栏或通知抽屉。 现在,我试图禁用状态栏,但当我从屏幕上方向下拉时,它似乎重新出现。如果我第二次下拉通知抽屉被打开。有没有办法完全禁用状态栏? 我查看了以下链接上的文档,但我认为没有解决方案。在API级别16中,我们能够完全禁用它,但在API级别19中无法禁用。https://developer.android.com
问题内容: 如何在Android HoneyComb中隐藏或删除状态栏?每次运行应用程序时,我都会发现状态栏必须覆盖一些内容。 我已尝试更改,但没有任何更改。 问题答案: 你不知道 与电容式家庭/菜单/等相同,它被认为是永久性的屏幕装饰。Android手机触摸屏下方的按钮。 您如何衡量可用于内容的空间?
如何在ios 9中隐藏状态栏? 现在已弃用:
在我的项目中,我可以在iPhone上隐藏状态栏。 但它不适用于我的iPad我怎么能在iPad上隐藏状态栏?