鴻蒙HarmonyOS官方模板學(xué)習(xí) 之 Full Screen Ability(Java)
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
Full Screen Ability(Java)
介紹
使用Java語言開發(fā),用于Phone設(shè)備的FeatureAbility模板,使用XML布局。為開發(fā)者提供全屏頁的示例工程,使用了Image組件,并實現(xiàn)了橫豎屏切換,并保持全屏顯示。
搭建環(huán)境
安裝DevEco Studio,詳情請參考DevEco Studio下載。
設(shè)置DevEco Studio開發(fā)環(huán)境,DevEco Studio開發(fā)環(huán)境需要依賴于網(wǎng)絡(luò)環(huán)境,需要連接上網(wǎng)絡(luò)才能確保工具的正常使用,可以根據(jù)如下兩種情況來配置開發(fā)環(huán)境:
如果可以直接訪問Internet,只需進行下載HarmonyOS SDK操作。
如果網(wǎng)絡(luò)不能直接訪問Internet,需要通過代理服務(wù)器才可以訪問,請參考配置開發(fā)環(huán)境。
卡片布局
實現(xiàn)該效果其實有2個布局文件,land_main.xml #橫屏布局文件,port_main.xml #豎屏布局文件
布局文件對比,有2處不同,
1.最外層的DirectionalLayout布局的orientation,橫屏值設(shè)置為horizonal,豎屏值設(shè)置為vertical
2.橫屏布局是bottom_margin/top_margin 設(shè)置為0,豎屏布局是left_margin/right_margin 設(shè)置為0
橫屏布局文件豎屏布局文件


后臺邏輯
1.啟動時,添加窗口標(biāo)志。 您可以從 WindowManager.LayoutConfig 獲取當(dāng)前支持的標(biāo)志。
然后根據(jù)手機方向的不同來加載不同的布局文件。
- @Override
- public void onStart(Intent intent) {
- super.onStart(intent);
- // hide status bar
- HiLog.debug(LABEL, "添加窗口標(biāo)志,全屏模式,隱藏狀態(tài)欄和面板可以擴展到屏幕之外。");
- this.getWindow().addFlags(WindowManager.LayoutConfig.MARK_ALLOW_EXTEND_LAYOUT);
- this.getWindow().addFlags(WindowManager.LayoutConfig.MARK_FULL_SCREEN);
- // adapt orientation
- //0:PORTRAIT,1:LANDSCAPE
- int orientation = getResourceManager().getConfiguration().direction;
- HiLog.debug(LABEL, "從資源管理配置中獲取方向:%{public}s ,加載布局文件", orientation==0?"PORTRAIT":"LANDSCAPE");
- if (orientation == Configuration.DIRECTION_HORIZONTAL) {
- super.setUIContent(ResourceTable.Layout_land_main);
- } else {
- super.setUIContent(ResourceTable.Layout_port_main);
- }
- }
2.當(dāng)屏幕的顯示方向改變時重新加載布局文件,此處和啟動時判定方式不同,
利用AbilityInfo.DisplayOrientation和 AbilityInfo.DisplayOrientation.LANDSCAPE 進行判定。
- @Override
- protected void onOrientationChanged(AbilityInfo.DisplayOrientation displayOrientation) {
- super.onOrientationChanged(displayOrientation);
- if (displayOrientation == AbilityInfo.DisplayOrientation.LANDSCAPE) {
- HiLog.debug(LABEL, "手機方向發(fā)生改變,變?yōu)椋?{public}s ,重新加載布局文件", "LANDSCAPE");
- setUIContent(ResourceTable.Layout_land_main);
- } else {
- HiLog.debug(LABEL, "手機方向發(fā)生改變,變?yōu)椋?{public}s ,重新加載布局文件", "PORTRAIT");
- setUIContent(ResourceTable.Layout_port_main);
- }
- }
java版本的邏輯比較簡單,看了一下js版本的案例,支持更多的設(shè)備類型,處理邏輯也不一樣,tv和wearable沒有橫豎屏之分,尺寸差異也比較大,用了2張不同尺寸的圖片,核心關(guān)鍵是利用css通過dispaly來控制顯示和隱藏,適配不同的設(shè)備。
效果展示
文章相關(guān)附件可以點擊下面的原文鏈接前往下載
原文鏈接:https://harmonyos.51cto.com/posts/4776
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)