Ala*_*kov 1 android navigationbar android-fullscreen
以下代码旨在每次用户点击屏幕时切换导航栏可见性.除了一种情况外它工作得很好 - 非常快速点击屏幕.在某些情况下,当用户点击非常快时,导航栏会在onClick触发事件时保持在屏幕上.
这是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));
};
Run Code Online (Sandbox Code Playgroud)
}
我尝试过不同的布局(没有视图,TextView,全屏ImageView),行为没有区别.这是LogCat输出,看看6行.通话onSystemUiVisibilityChange后没有记录任何事件setSystemUiVisibility():
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
Run Code Online (Sandbox Code Playgroud)
我正在使用Android 5.1.1设备和22个目标/最低API级别.
好吧,事实证明这是一个功能,而不是一个错误.而问题是setSystemUiVisibility连续呼叫之间的间隔,而不是快速点击屏幕.我不得不深入研究Android资源,我发现了这个:
...
// 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);
}
...
Run Code Online (Sandbox Code Playgroud)
它HideNavInputEventReceiver在PhoneWindowManager.java.我还在Xperia Z2上的相册应用程序中复制了这个"bug".
| 归档时间: |
|
| 查看次数: |
822 次 |
| 最近记录: |