Android系统。隐藏导航栏有时会失败 [英] Android. Hiding navigation bar sometimes fails

查看:831
本文介绍了Android系统。隐藏导航栏有时会失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在code低于预期切换导航栏上的知名度,每次用户点击在屏幕上。它工作正常,除了一个场景 - 在屏幕上非常快速的自来水。在某些情况下,当用户点击的真快,导航栏,尽管onClick事件触发停留在屏幕上。

The code below intended to toggle navigation bar visibility every time user clicks on screen. And it works fine except one scenario - very fast tap on screen. In some cases, when user clicks really fast, navigation bar stays on screen despite onClick event triggered.

下面是MainActivity的code:

Here is the code of MainActivity:

package com.example.ui_test;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RelativeLayout;

public class MainActivity extends Activity {

private final String DEBUG_TAG = "UI TEST";
int uiOptions = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RelativeLayout r = (RelativeLayout) findViewById(R.id.main_layout);
    r.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            toggleUiVisibility();
        }
    });

    View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
        @Override
        public void onSystemUiVisibilityChange(int visibility) {
            Log.d(DEBUG_TAG, "Visibility changed. New flags: " + Integer.toString(visibility, 2));
            uiOptions = visibility;
        }
    });
}

protected void toggleUiVisibility() {
    uiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;        
    getWindow().getDecorView().setSystemUiVisibility(uiOptions);
    Log.d(DEBUG_TAG, "Set visibility to: " + Integer.toString(uiOptions, 2));
};

}

我试着用不同的布局(没意见,TextView的,全屏ImageView的),有行为没有区别。这是LogCat中输出,看一下6号线。在 setSystemUiVisibility登录否 onSystemUiVisibilityChange 事件()电话:

I've tried with different layouts (no views, TextView, fullscreen ImageView), there is no difference in behavior. This is LogCat output, look at 6 line. No onSystemUiVisibilityChange event logged after setSystemUiVisibility() call:

09-21 18:24:19.871: D/UI TEST(3901): Visibility changed. New flags: 0
09-21 18:24:21.139: D/UI TEST(3901): Set visibility to: 10
09-21 18:24:21.171: D/UI TEST(3901): Visibility changed. New flags: 10
09-21 18:24:23.478: D/UI TEST(3901): Visibility changed. New flags: 0
09-21 18:24:24.321: D/UI TEST(3901): Set visibility to: 10
09-21 18:24:25.245: D/UI TEST(3901): Set visibility to: 0
09-21 18:24:25.927: D/UI TEST(3901): Set visibility to: 10
09-21 18:24:25.959: D/UI TEST(3901): Visibility changed. New flags: 10
09-21 18:24:33.625: D/UI TEST(3901): Visibility changed. New flags: 0
09-21 18:24:35.458: D/UI TEST(3901): Set visibility to: 10
09-21 18:24:35.490: D/UI TEST(3901): Visibility changed. New flags: 10
09-21 18:24:36.607: D/UI TEST(3901): Visibility changed. New flags: 0
09-21 18:24:38.294: D/UI TEST(3901): Set visibility to: 10
09-21 18:24:38.326: D/UI TEST(3901): Visibility changed. New flags: 10

我使用的是Android 5.1.1设备和22目标/最低API级别。

I'm using Android 5.1.1 device and 22 target/minimum API level.

推荐答案

好吧,事实证明这是一个功能,不是一个错误。而问题是到没有在屏幕上快速敲击 setSystemUiVisibility 连续调用之间的时间间隔。我不得不深入到Android的来源,我发现这一点:

Ok, it turns out it's a feature, not a bug. And the problem was into the interval between setSystemUiVisibility consecutive calls not in fast tap on screen. I had to dig into Android sources and I found this:

...

// We don't allow the system's nav bar to be hidden
// again for 1 second, to prevent applications from
// spamming us and keeping it from being shown.
 newVal = mForceClearedSystemUiFlags |
          View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
 if (mForceClearedSystemUiFlags != newVal) {
     mForceClearedSystemUiFlags = newVal;
     changed = true;
     mHandler.postDelayed(mClearHideNavigationFlag, 1000);
 }

...

这是 HideNavInputEventReceiver PhoneWindowManager.java 。我也转载相册应用这个错误上的Xperia Z2。

It's HideNavInputEventReceiver in PhoneWindowManager.java. I've also reproduced this "bug" in Album application on Xperia Z2.

这篇关于Android系统。隐藏导航栏有时会失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆