開發跨設備的鴻蒙(HarmonyOS) App

爲了讓更多的人看到本文,請各位讀者動動小手,點擊右上角【...】,將本文分享到朋友圈,thanks! 


如今的智能設備種類愈來愈多,並且這些智能設備的屏幕尺寸、分辨率都不一樣,例如,比較常見的智能設備有手機、平板電腦、車載電腦、智能電視、智能手錶等。儘管這些設備都有屏幕,但它們的屏幕千差萬別,有的屏幕尺寸小,有的屏幕尺寸大,有的是縱向的屏幕,有的是橫向的屏幕,有的帶觸摸功能,有的不帶觸摸功能,甚至有的設備的屏幕是圓形(如智能手錶),這就給開發App帶來了麻煩。如今幾乎每個智能設備廠商,如Apple、華爲都面臨這個問題。這就要求咱們開發的App儘量適合更多的智能設備。
固然,最簡單,最直接的方式是爲每一類智能設備單獨開發App。例如,爲手機開發一款App,爲智能電視開發一款App,爲智能手錶開發一款App。這麼作儘管從技術上是可行的,但因爲這些不一樣設備的App,儘管在UI展示上不一樣,但大多數邏輯代碼是相同的。若是單獨爲不一樣的設備開發App,將會形成大量的代碼冗餘。因此我推薦的方案是讓一個App同時適用於不一樣的智能設備。基本的原理是在App運行時會自動檢測當前的設備,而後會執行與特定設備相關的代碼,使用與特定設備相關的佈局和資源。
這裏的關鍵點是檢測當前的設備類型。在建立HarmonyOS工程時,要麼建立TV(華爲智慧屏)工程,要麼建立Wearable(智能手錶)工程,因此使用模板建立的HarmonyOS工程只能在一類設備(TVWearable)中運行。讀者能夠經過config.json文件的deviceType屬性查看當前工程能夠運行的設備類型,若是建立的是TV工程,deviceType屬性的值以下:
"deviceType": ["tv" ]
若是建立的是Wearable工程,deviceType屬性的值以下:
"deviceType": ["wearable" ]
若是deviceType屬性的值是tv,當前工程是不能在智能手錶上運行的,反之亦然。要想讓當前工程同時在TVWearable上運行,須要同時指定tvwearable(要手動修改config.json文件),配置代碼以下:
"deviceType": ["tv","wearable" ]
當完成deviceType屬性的設置後,當前工程就能夠同時在TVWearable上運行了。不過因爲TVWearable的屏幕尺寸相差太多,因此佈局一般會採用徹底不一樣的樣式。在HarmonyOS中,可使用Java語言動態建立組件的方式實現佈局,也可使用佈局文件。關於佈局文件的使用,在後面的文章中會詳細介紹。本文主要討論使用Java代碼動態建立組件的佈局方式。
在建立的HarmonyOS工程中會自動生成一個樣例代碼,這些代碼主要集中在MainAbilitySlice.java文件中的onStart方法中,代碼以下:
public void onStart(Intent intent) {
        super.onStart(intent); LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT); myLayout.setLayoutConfig(config); ShapeElement element = new ShapeElement(); element.setRgbColor(new RgbColor(255, 255, 255)); myLayout.setBackground(element); Text text = new Text(this); text.setLayoutConfig(config); text.setText("Hello World"); text.setTextColor(new Color(0xFF000000)); text.setTextSize(50); text.setTextAlignment(TextAlignment.CENTER); myLayout.addComponent(text);super.setUIContent(myLayout); }
讀者並不須要對這段代碼的每一行都瞭解,只須要知道這段代碼將背景設爲白色,而且在建立了一個用於顯示文本的Text組件,而且在屏幕中心顯示Hello World。若是在TV設備上運行,效果如圖1所示。不過這樣以來,在全部的設備中的UI都同樣,但咱們的目的是讓不一樣的設備顯示不一樣的UI,因此就須要經過下面的代碼判斷當前設備的類型。
if(DeviceInfo.getDeviceType().equals("tv")) {  ... ...} else if(DeviceInfo.getDeviceType().equals("wearable")) { ... ...}

圖1
其中getDeviceType方法返回的值就是App當前運行設備的類型。若是運行在TV上,值爲tv,若是運行在智能手錶上,值爲wearable。因此能夠用下面的代碼來替換onStart方法中的代碼。
public void onStart(Intent intent) { super.onStart(intent); LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT); myLayout.setLayoutConfig(config); ShapeElement element = new ShapeElement(); element.setRgbColor(new RgbColor(255, 255, 255)); myLayout.setBackground(element); Text text = new Text(this); text.setLayoutConfig(config);if(DeviceInfo.getDeviceType().equals("tv")) { // 運行在TV上執行的代碼 text.setText("華爲智慧屏"); text.setTextColor(new Color(0xFFFF0000)); text.setTextSize(200); } else if(DeviceInfo.getDeviceType().equals("wearable")) {// 運行在Wearable上執行的代碼 text.setText("華爲智能手錶"); text.setTextColor(new Color(0xFF0000FF)); text.setTextSize(50); } text.setTextAlignment(TextAlignment.CENTER); myLayout.addComponent(text); super.setUIContent(myLayout); }

在這段代碼中,將TVWearable上顯示的文本內容、文本尺寸和文本顏色作了改變,因此在TVWearable上顯示的文本是不一樣的。在TV上顯示的效果如圖2所示。在Wearable上顯示的效果如圖3所示。
 

圖2 在TV上顯示的效果

圖3 在Wearable上顯示的效果

- EOF -javascript

推薦閱讀  點擊標題可跳轉

1. 比Python更牛的語言有嗎?看我用元類(metaclass)花式建立Python類java

2. 見鬼!導入Python模塊執行了全部代碼,你不知道__name__變量是什麼意思嗎?
web

3. 連Python產生器(Generator)的原理都解釋不了,還敢說Python用了5年?編程

4. 牛掰了!鴻蒙與Android完美融合,將鴻蒙設備當Android設備用json

5. 【鴻蒙學院】鴻蒙App開發直播學員提問與回答微信

6. 【鴻蒙學院】鴻蒙IDE:下載、安裝DevEco Studioapp

7.  Python高效編程之88條軍規(2):你真的會格式化字符串嗎?佈局


關注「極客起源」公衆號,加星標,不錯過精彩技術乾貨
ui





本文分享自微信公衆號 - 極客起源(geekculture)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。this

相關文章
相關標籤/搜索