讨论广场 问答详情
launcher应用源码横屏切换的功能在哪里,如何将横屏下Dock快捷导航栏位置上移而不影响其竖屏下的位置
你还唱着歌 2025-01-17 09:22:36
42 评论 分享

现在横屏状态下Dock栏位置太靠下与导航栏重叠无法点击,更改dock的位置桌标又会影响竖屏状态下位置。请教如何修改

42 评论 分享
写回答
全部评论(4)
1 楼

横屏源码在pad里面,

竖版源码在phone里面,

不过pad版launcher里面需要自己稍微适配下。

 

2025-01-17 09:27:07
2025-01-17 10:08:06
引用:“phone和pad不是两个产品吗,我现在用的product\phone下的hap,开启自动旋转后平板能够横竖屏自动切换,想知道横竖屏切换的逻辑在哪实现”
也可以参考 获取监听句柄:通过mediaQuery.matchMediaSync(‘screen and (min-aspect-ratio: 1.5) or (orientation: landscape)’)方法来获取有一个监听横竖屏的句柄,接口参考:@ohos.mediaquery ; 执行控制横竖屏切换效果的函数:调用this.listener.on(‘change’, this.onLand.bind(this))函数来实现横竖屏下不同的功能或者页面效果; 实现方案还是蛮多,主要是UI适配需要调整下,能同时适应横竖屏,像栅格化和断点也算比较不错的方案。
2025-01-17 10:08:06
2025-01-17 10:04:13
横竖屏切换的逻辑是系统行为,一版由部分系统服务来监听sensor的变化,再有这些系统服务来设置横竖屏。比如systemui的Service. 如果你想横竖屏都用phone版本的launcher,那么launcher就需要去监听屏幕的状态,根据屏幕的状态来调整自己的布局,比如Dock栏的位置,导航栏状态栏的高度等等。 public isLandscape(): boolean { try { let displayClass: display.Display | null = null; displayClass = display.getDefaultDisplaySync(); Log.showInfo(TAG, `displayClass ${JSON.stringify(displayClass)}`); if(displayClass.orientation == 1 || displayClass.orientation == 3){ //后续计划使用开机自启服务实时监听屏幕状态后,设置一个屏幕状态的属性。以适应屏幕旋转。 Log.showInfo(TAG, `displayClass.orientation ${JSON.stringify(displayClass.orientation)}`); return true } } catch (exception) { console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception)); } return false } 或参考screen,实际设置横竖屏就是用的screenClass.setOrientation接口。 https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-arkui/js-apis-screen-sys.md#%E5%B1%9E%E6%80%A7
2025-01-17 10:04:13
2025-01-17 09:44:40
phone和pad不是两个产品吗,我现在用的product\phone下的hap,开启自动旋转后平板能够横竖屏自动切换,想知道横竖屏切换的逻辑在哪实现
2025-01-17 09:44:40