长按事件来控制状态栏的隐藏和显示

本文介绍了一个在Android系统中通过Launcher的长按事件控制状态栏显示与隐藏的方法。该方法利用了系统属性persist.sys.fullscreen,并修改了PhoneWindowManager和Launcher的源代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近客户有个需求:就是要通过在LANCHER中的长按事件来控制状态栏隐藏和显示,比如说:判断当前的状态栏的状态,如果当前状态栏是隐藏的,那么长按事件就是显示状态栏,如果当前状态栏是显示的,那么长按的事件就是隐藏状态栏。

        前面也有一篇文章:ANDROID 动态开关状态栏,是通过广播的形式来动态控制状态栏的,这里有个简单的例子:就是借用LANCHER中长按会弹出选择壁纸的地方来添加我们要实现的功能;下面贴下更改的PATCH

       diff --git a/device/rockchip/rk30sdk/device.mk b/device/rockchip/rk30sdk/device.mk
index c98aae8..1fd4c25 100755
--- a/device/rockchip/rk30sdk/device.mk
+++ b/device/rockchip/rk30sdk/device.mk
@@ -245,6 +245,7 @@ PRODUCT_PROPERTY_OVERRIDES += \
     ro.rk.install_non_market_apps=false\
     ro.default.size=100\
     persist.sys.timezone=Atlantic/Azores\
+    persist.sys.fullscreen=normal\
     persist.sys.reboottest=0 \
     ro.product.usbfactory=rockchip_usb \
     wifi.supplicant_scan_interval=15 \
diff --git a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager
index 3805dd3..2fc6af8 100755
--- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -4506,9 +4506,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
             // will quickly lose focus once it correctly gets hidden.
             return 0;
         }
-        int tmpVisibility = mFocusedWindow.getSystemUiVisibility()
-                & ~mResettingSystemUiFlags
-                & ~mForceClearedSystemUiFlags;
+        int tmpVisibility;
+               int temp= mFocusedWindow.getSystemUiVisibility()& ~mResettingSystemUiFlags& ~mForceClearedSystemUiFlags;
+               //Log.v(TAG, "yds ,SystemProperties.get persist.sys.fullscreen=" + SystemProperties.get("persist.sys.fullscreen",""));
+               if(SystemProperties.get("persist.sys.fullscreen","").equals("full")){
+                       tmpVisibility=temp|View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN;
+                       }else{
+                       tmpVisibility=temp;
+                       }
         if (mForcingShowNavBar && mFocusedWindow.getSurfaceLayer() < mForcingShowNavBarLayer) {
             tmpVisibility &= ~View.SYSTEM_UI_CLEARABLE_FLAGS;
         }
diff --git a/packages/apps/Launcher2/src/com/android/launcher2/Launcher.java b/packages/apps/Launcher2/src/com/android/launcher2/Launcher.java
index b42eb4d..bdbeea0 100755
--- a/packages/apps/Launcher2/src/com/android/launcher2/Launcher.java
+++ b/packages/apps/Launcher2/src/com/android/launcher2/Launcher.java
@@ -2337,6 +2337,13 @@ public final class Launcher extends Activity
             v = (View) v.getParent().getParent();
         }
 
+        if(SystemProperties.get("persist.sys.fullscreen","").equals("full")){
+                       SystemProperties.set("persist.sys.fullscreen","normal");
+                       }else{
+                       SystemProperties.set("persist.sys.fullscreen","full");
+                       }
         resetAddInfo();
         CellLayout.CellInfo longClickCellInfo = (CellLayout.CellInfo) v.getTag();

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值