android4.4上全屏界面实现禁止状态栏下拉
16lz
2021-12-04
附上我修改的方法:PhoneWindowManager.java里面的修改 [java] view plain copy
[java] view plain copy
2. frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
[java] view plain copy
3. 請在修改完framework后,將測試app用setSystemUiVisibility的API加上SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED的flag
- --- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
- +++ b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
- @@ -2863,7 +2863,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
- @Override
- public int adjustSystemUiVisibilityLw(int visibility) {
- - mStatusBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
- + if(Settings.System.getInt(mContext.getContentResolver(),"factorytest.touch.mode",0) == 0){
- + mStatusBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
- + }
- mNavigationBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
- // Reset any bits in mForceClearingStatusBarVisibility that
- --- a/huaqin/source/packages/FactoryKitTest/src/com/android/huaqin/factory/TestTouchPanelLine2.java
- +++ b/huaqin/source/packages/FactoryKitTest/src/com/android/huaqin/factory/TestTouchPanelLine2.java
- @@ -32,6 +32,8 @@ import android.view.WindowManager;
- import java.util.ArrayList;
- import java.util.List;
- +import android.provider.Settings;
- +import android.app.StatusBarManager;
- public class TestTouchPanelLine2 extends Activity {
- private static final String TAG = "TestTouchPanelLine";
- @@ -54,6 +56,7 @@ public class TestTouchPanelLine2 extends Activity {
- private static final int MSG_TEST_PANEL_NEXT_ITEM = 100;
- private static final int MSG_TEST_PANEL_START = 101;
- private static final int MSG_TEST_PANEL_STOP = 102;
- + private StatusBarManager mStatusBarManager;
- private Handler mInHandler = new Handler() {
- @Override
- @@ -94,6 +97,12 @@ public class TestTouchPanelLine2 extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- @@ -141,8 +150,22 @@ public class TestTouchPanelLine2 extends Activity {
- .obtainMessage(FactoryTestMessage.MSG_OPEN_UI_OK);
- msg.arg1 = (int) ID;
- mOutHandler.sendMessage(msg);
- + mStatusBarManager = (StatusBarManager) this.getSystemService(Context.STATUS_BAR_SERVICE);
- + int state= StatusBarManager.DISABLE_EXPAND;
- + state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;
- + state |= StatusBarManager.DISABLE_SYSTEM_INFO;
- + mStatusBarManager.disable(state);
- }
- + @Override
- + protected void onPause() {
- + int state = StatusBarManager.DISABLE_NONE;
- + mStatusBarManager.disable(state);
- + super.onPause();
- + }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // 是否触发按键为back键
[java] view plain copy
- public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 0x00001000;
- + /**
- + * @hide
- + *
- + * NOTE: Flag for {@link #setSystemUiVisibility(int)}: It help user to disable transient
- + * status bar triggered by gesture
- + */
- + public static final int SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED = 0x00002000;
2. frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
[java] view plain copy
- // monitor for system gestures
- mSystemGestures = new SystemGesturesPointerEventListener(context,
- new SystemGesturesPointerEventListener.Callbacks() {
- @Override
- public void onSwipeFromTop() {
- + if (isGestureIsolated())
- + return;
- if (mStatusBar != null) {
- requestTransientBars(mStatusBar);
- }
- }
- @Override
- public void onSwipeFromBottom() {
- + if (isGestureIsolated())
- + return;
- if (mNavigationBar != null && mNavigationBarOnBottom) {
- requestTransientBars(mNavigationBar);
- }
- }
- @Override
- public void onSwipeFromRight() {
- + if (isGestureIsolated())
- + return;
- if (mNavigationBar != null && !mNavigationBarOnBottom) {
- requestTransientBars(mNavigationBar);
- }
- }
- @Override
- public void onDebug() {
- // no-op
- }
- + private boolean isGestureIsolated() {
- + WindowState win = mFocusedWindow != null ? mFocusedWindow : mTopFullscreenOpaqueWindowState;
- + if (win != null && (win.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED) != 0)
- + return true;
- + else
- + return false;
- + }
- });
3. 請在修改完framework后,將測試app用setSystemUiVisibility的API加上SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED的flag
更多相关文章
- 【Android开发】android最全的颜色对应的16进制代码(androidUI设
- Android(安卓)高工面试必考题(二):Android的事件分发机制设计与实现
- 【Android(安卓)UI设计与开发】第06期:底部菜单栏(一)使用TabActivi
- Android(安卓)Market中产品图标设计原则
- android 修改AVD的存放位置
- 高焕堂:iPhone软件是芝麻,巧用Android才能赚大钱
- 【Android(安卓)设计】:启航_ UI概览
- Android内存阀值修改--内存回收机制配置
- 精通android体系架构、mvc、常见的设计模式、控制反转(ioc)