禁用状态栏Android 4+

时间:2014-05-07 04:34:54

标签: android

我经常看到答案是,这是不可能的。我认为谷歌不希望你这样做。但我正在建立一个自助服务终端应用程序。我知道这是可能的,因为这个应用程序这样做: https://play.google.com/store/apps/details?id=com.procoit.kioskbrowser

所以安装应用程序并打开它。如果向下滚动顶部的状态栏,它会显示状态栏但不会展开它。

我认为他们正在做一些hacky但我希望能够做到这一点。关于他们在做什么的任何想法?

3 个答案:

答案 0 :(得分:0)

试试这个..为我工作..

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);     
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,windowManager.LayoutParams.FLAG_FULLSCREEN);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.about_app_phone);

}

答案 1 :(得分:0)

android的默认实现不支持禁用状态栏,在我的应用程序中我使用了反射来调用statusbarmanager。你也可以做同样的事情。

Object lStatusBarSvc = getSystemService("statusbar");
Class<?> lStatusbarManager = Class.forName("android.app.StatusBarManager");

Method collapse = lStatusbarManager.getMethod("collapse");
collapse.setAccessible(true);
collapse.invoke(lStatusBarSvc);

答案 2 :(得分:0)

我们无法阻止在kitkat设备中以全屏模式显示状态,因此制作了一个仍然符合要求的黑客攻击,即阻止状态栏扩展。

为此,该应用程序未全屏显示。我们在状态栏上放置了一个叠加层并消耗了所有输入事件。它阻止了地位的扩大。

<强> 注意:

  • customViewGroup是自定义类,可以扩展任何类 布局(框架,相对布局等)并消耗触摸事件。
  • 使用touch事件覆盖onInterceptTouchEvent方法 视图组并返回true

<强>更新

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

customViewGroup implementation 代码:

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

希望这有助于你