使用全屏隐藏android 4.4+或kitkat中的状态栏

时间:2015-10-07 05:31:58

标签: android hide fullscreen statusbar android-4.4-kitkat

我正在使用以下代码隐藏状态栏以实现全屏:

    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操作系统版本为4.4.2 (以上代码适用于4.3但不适用于4.4.2)

更新

问题已经解决了...... 答案分别写在下面......

4 个答案:

答案 0 :(得分:6)

由于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;
        }
    }

现在,onCreate mainActivity 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"/>

现在在清单中添加权限:

disables expansion of status bar for the device

你完成了......:)

缺点: 此代码fork()不仅适用于某个活动或应用,因此如果您确实需要它,请使用它。

感谢您提供所有解决方案和建议...... :)

答案 1 :(得分:3)

我们无法阻止在kitkat或更高版本设备中以全屏模式显示状态,因此请尝试通过黑客来阻止状态栏扩展。

对于一个想法,将覆盖放在状态栏上并使用所有输入事件。它会阻止状态栏扩展。

答案 2 :(得分:2)

使用以下代码,您可以全屏使用;

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

在setcontentview上面写下面的代码。

  

注意:不要为此活动提供任何主题。

希望这有帮助。

答案 3 :(得分:0)

使用以下代码 onCreate

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 requestWindowFeature(Window.FEATURE_NO_TITLE);   
 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
 }