亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開(kāi)發(fā)(Harmonyos兼容與Harmonyos適配)

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-26 17:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

布局的實(shí)現(xiàn)

Layout_ability_main.xml布局:

< ?xml version="1.0" encoding="utf-8"? >
< DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:orientation="vertical" >

    < TextField
        ohos:id="$+id:content"
        ohos:height="0vp"
        ohos:weight="1"
        ohos:width="match_parent"
        ohos:enabled="false"
        ohos:padding="20vp"
        ohos:text="0"
        ohos:text_alignment="center"
        ohos:text_size="30"/ >

    < ScrollView
        ohos:height="0vp"
        ohos:weight="1.8"
        ohos:width="match_parent" >

        < DirectionalLayout
            ohos:height="match_content"
            ohos:width="match_parent"
            ohos:alignment="horizontal_center"
            ohos:orientation="vertical" >

            < DirectionalLayout
                ohos:height="match_content"
                ohos:width="match_parent"
                ohos:orientation="horizontal" >

                

                

                

                

            < /DirectionalLayout >

            < DirectionalLayout
                ohos:height="match_content"
                ohos:width="match_parent"
                ohos:orientation="horizontal" >

                

                

                

                

            < /DirectionalLayout >

            < DirectionalLayout
                ohos:height="match_content"
                ohos:width="match_parent"
                ohos:orientation="horizontal" >

                

                

                

                

            < /DirectionalLayout >

            < DirectionalLayout
                ohos:height="match_content"
                ohos:width="match_parent"
                ohos:orientation="horizontal" >

                

                

                

                

            < /DirectionalLayout >

            < DirectionalLayout
                ohos:height="match_content"
                ohos:width="match_parent"
                ohos:orientation="horizontal" >


                

                

                

            < /DirectionalLayout >

        < /DirectionalLayout >
    < /ScrollView >
< /DirectionalLayout >
< /DirectionalLayout >
< /DirectionalLayout >

background_button1.xml背景樣式:

< ?xml version="1.0" encoding="utf-8"? >
< shape
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:shape="rectangle" >
    < solid ohos:color="#CCF1F1F1"/ >
    < corners ohos:radius="20vp"/ >
< /shape >
< /shape >
< /shape >

background_button2.xml背景樣式:

< shape
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:shape="rectangle" >
    < solid ohos:color="#FFE4F2FE"/ >
    < corners ohos:radius="20vp"/ >
< /shape >
< /shape >
< /shape >

background_button3.xml背景樣式:

< ?xml version="1.0" encoding="utf-8"? >
< shape
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:shape="rectangle" >
    < solid ohos:color="#FF007CFD"/ >
    < corners ohos:radius="20vp"/ >
< /shape >
< /shape >
< /shape >

嗯,編寫(xiě)布局頁(yè)面不難、稍微難點(diǎn)的是電視、車(chē)載設(shè)備、Pad、手機(jī)、手表五個(gè)端的屏幕適配。

界面編寫(xiě)完,發(fā)現(xiàn)各個(gè)端的屏幕高度還沒(méi)有做適配,一開(kāi)始認(rèn)為AndroidHarmonyOSJava語(yǔ)言都可以編寫(xiě),HarmonyOS也可以使用Android的相關(guān)框架,便想著如何在HarmonyOS上去使用Android的屏幕適配方案,在用了今日頭條的屏幕適配方案開(kāi)刀后,發(fā)現(xiàn)壓根行不通,今日頭條的屏幕適配方案用的單位是dp,這個(gè)單位在HarmonyOS上并沒(méi)有,只有類(lèi)似的vp,看來(lái)還是我太天真了。

Android屏幕單位有dp、in、mm、pt、px、sp,HarmonOS屏幕單位有fp、px、vp。

其中兩者相同的單位是px,Android的dp與HarmonOS的vp都是為各自設(shè)備量身打造的單位,若想要搞一個(gè)兩者都可以用的屏幕適配框架,也許,只能從px找突破口。今日頭條的屏幕適配方案用的單位雖然是HarmonyOS所沒(méi)有的dp,但其實(shí)它最終都是要拿dp來(lái)轉(zhuǎn)換成px的喔~

Java代碼邏輯

繼承AbilitySlice的MainAbilitySlice類(lèi):

public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
    private Utils utils = Utils.getInstance();
    private TextField content;
    private String formula = "";

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        initView();
        highlyAdaptive();
    }

    /**
     * 各個(gè)按鈕點(diǎn)擊事件
     * @param component
     */
    @Override
    public void onClick(Component component) {
        switch (component.getId()) {
            case ResourceTable.Id_one:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "1");
                else formula = "1";
                break;
            case ResourceTable.Id_two:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "2");
                else formula = "2";
                break;
            case ResourceTable.Id_three:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "3");
                else formula = "3";
                break;
            case ResourceTable.Id_four:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "4");
                else formula = "4";
                break;
            case ResourceTable.Id_five:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "5");
                else formula = "5";
                break;
            case ResourceTable.Id_six:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "6");
                else formula = "6";
                break;
            case ResourceTable.Id_seven:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "7");
                else formula = "7";
                break;
            case ResourceTable.Id_eight:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "8");
                else formula = "8";
                break;
            case ResourceTable.Id_nine:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "9");
                else formula = "9";
                break;
            case ResourceTable.Id_zero:
                if (utils.isNumStart(formula)) formula = utils.isZero(formula, "0");
                else formula = "0";
                break;
            case ResourceTable.Id_reset:
                formula = "0";
                break;
            case ResourceTable.Id_except:
                if (utils.isNumEnd(formula)) formula += "÷";
                else if (!formula.substring(formula.length() - 1, formula.length()).equals("."))
                    formula = formula.substring(0, formula.length() - 1) + "÷";
                break;
            case ResourceTable.Id_ride:
                formula = utils.isNum(formula, "x");
                break;
            case ResourceTable.Id_percentage:
                formula = utils.isNum(formula, "%");
                break;
            case ResourceTable.Id_decimal_point:
                if (utils.isNumEnd(formula) && !utils.isDecimals(formula)) formula += ".";
                break;
            case ResourceTable.Id_delete:
                if (!formula.equals("") && !formula.equals("0")) {
                    formula = formula.substring(0, formula.length() - 1);
                    if (formula.equals("")) formula = "0";
                }
                break;
            case ResourceTable.Id_reduce:
                if (utils.isNumEnd(formula)) formula += "-";
                else formula = formula.substring(0, formula.length() - 1) + "-";
                break;
            case ResourceTable.Id_add:
                if (utils.isNumEnd(formula)) formula += "+";
                else formula =
                        formula.substring(0, formula.length() - 1) + "+";
                break;
            case ResourceTable.Id_equal:
                equal();
                break;
            default:
                break;
        }
        if (component.getId() != ResourceTable.Id_equal) {
            content.setText(formula);
        }
    }

    private void equal() {
        if (formula.equals("")) {
            // 如果沒(méi)有輸入公式
            utils.toast(this, "還沒(méi)輸入公式呢");
            return;
        } else if (!utils.isNumEnd(formula)) {
            // 如果公式的最后一位數(shù)非數(shù)字
            utils.toast(this, "計(jì)算器表示沒(méi)見(jiàn)過(guò)這樣的數(shù)學(xué)公式,運(yùn)算不出來(lái)");
            return;
        }
        String[] split;
        if (!utils.isContains(formula, ".")) {
            // 計(jì)算整數(shù)
            if (utils.isContains(formula, "-")) {
                // 減法
                split = formula.split("-");
                if (split.length > 1)
                    result((Integer.parseInt(split[0]) + Integer.parseInt(split[1])) + "");
            } else if (utils.isContains(formula, "+")) {
                // 加法
                split = formula.split("+");
                if (split.length > 1)
                    result((Integer.parseInt(split[0]) + Integer.parseInt(split[1])) + "");
            } else if (utils.isContains(formula, "x")) {
                // 乘法
                split = formula.split("x");
                if (split.length > 1)
                    result((Integer.parseInt(split[0]) + Integer.parseInt(split[1])) + "");
            } else if (utils.isContains(formula, "÷")) {
                // 除法
                split = formula.split("÷");
                if (split.length > 1)
                    result((Integer.parseInt(split[0]) + Integer.parseInt(split[1])) + "");
            } else if (utils.isContains(formula, "%")) {
                // 取余
                split = formula.split("%");
                if (split.length > 1)
                    result((Integer.parseInt(split[0]) + Integer.parseInt(split[1])) + "");
            }
        } else {
            // 計(jì)算小數(shù)
            if (utils.isContains(formula, "-")) {
                // 減法
                split = formula.split("-");
                if (split.length > 1)
                    result((Double.parseDouble(split[0]) - Double.parseDouble(split[1])) + "");
            } else if (utils.isContains(formula, "+")) {
                // 加法
                split = formula.split("+");
                if (split.length > 1)
                    result((Double.parseDouble(split[0]) - Double.parseDouble(split[1])) + "");
            } else if (utils.isContains(formula, "x")) {
                // 乘法
                split = formula.split("x");
                if (split.length > 1)
                    result((Double.parseDouble(split[0]) - Double.parseDouble(split[1])) + "");
            } else if (utils.isContains(formula, "÷")) {
                // 除法`
                split = formula.split("÷");
                if (split.length > 1)
                    result((Double.parseDouble(split[0]) - Double.parseDouble(split[1])) + "");
            } else if (utils.isContains(formula, "%")) {
                // 取余
                split = formula.split("%");
                if (split.length > 1)
                    result((Double.parseDouble(split[0]) - Double.parseDouble(split[1])) + "");
            }
        }
    }

    private void result(String value) {
        formula = value;
        content.setText(value);
    }

    /**
     * 根據(jù)不同設(shè)備調(diào)整高度
     */
    private void highlyAdaptive() {
        if (DeviceInfo.getDeviceType().equals("phone")) {
            // 手機(jī)設(shè)備
            ComponentContainer.LayoutConfig layoutConfig = new ComponentContainer.LayoutConfig();
            layoutConfig.height = 1100;
            content.setLayoutConfig(layoutConfig);
        } else if (DeviceInfo.getDeviceType().equals("tablet")) {
            // 平板設(shè)備
            ComponentContainer.LayoutConfig layoutConfig = new ComponentContainer.LayoutConfig();
            layoutConfig.height = 1200;
            content.setLayoutConfig(layoutConfig);
        } else if (DeviceInfo.getDeviceType().equals("tv")) {
            // TV設(shè)備
            ComponentContainer.LayoutConfig layoutConfig = new ComponentContainer.LayoutConfig();
            layoutConfig.height = 160;
            content.setLayoutConfig(layoutConfig);
        } else if (DeviceInfo.getDeviceType().equals("wearable")) {
            // 可穿戴設(shè)備
            ComponentContainer.LayoutConfig layoutConfig = new ComponentContainer.LayoutConfig();
            layoutConfig.height = 150;
            content.setLayoutConfig(layoutConfig);
        } else if (DeviceInfo.getDeviceType().equals("car")) {
            // 車(chē)載設(shè)備
            ComponentContainer.LayoutConfig layoutConfig = new ComponentContainer.LayoutConfig();
            layoutConfig.height = 500;
            content.setLayoutConfig(layoutConfig);
        }
    }

    /**
     * 初始化xml布局控件
     */
    private void initView() {
        content = (TextField) findComponentById(ResourceTable.Id_content);
        ((Button) findComponentById(ResourceTable.Id_one)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_two)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_three)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_four)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_five)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_six)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_seven)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_eight)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_nine)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_zero)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_reset)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_except)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_ride)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_delete)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_reduce)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_add)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_equal)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_decimal_point)).setClickedListener(this);
        ((Button) findComponentById(ResourceTable.Id_percentage)).setClickedListener(this);
    }
}
}
}

由于在編寫(xiě)xml UI時(shí)屏幕適配只能做到寬度適配或高度適配,沒(méi)辦法在一個(gè)xml界面同時(shí)適配寬度與高度,為此寫(xiě)了一個(gè)highlyAdaptive方法處理xml沒(méi)能完成的高度適配,方法通過(guò)DeviceInfo.getDeviceType()來(lái)得到設(shè)備的類(lèi)型,根據(jù)不同的設(shè)備去修改它的高度,也算是實(shí)現(xiàn)了高度適配。

Utils類(lèi):

public class Utils {
    private static Utils utils = new Utils();
    private static ToastDialog toastDialog;
    private String[] symbol = new String[]{"+", "-", "x", "÷", "%"};

    public static Utils getInstance() {
        return utils;
    }

    public void toast(Context context, String text) {
        if (toastDialog == null) {
            toastDialog = new ToastDialog(context);
        }
        toastDialog.setAlignment(LayoutAlignment.CENTER);
        toastDialog.setText(text);
        toastDialog.show();
    }

    /**
     * 判斷最后一位是否數(shù)字
     * @param content
     */
    public boolean isNumber(String content){
        char[] chars = content.substring(content.length() - 1, content.length()).toCharArray();
        return Character.isDigit(chars[0]);
    }

    /**
     * 判斷是否是小數(shù)
     */
    public boolean isDecimals(String str) {
        if (isDecimal(str)) {
            for (String s : symbol) {
                if (isContains(str, s)) {
                    String[] split = str.split(s);
                    if (split != null){
                        if (!isDecimal(split[split.length - 1])) {
                            return false;
                        } else {
                            return true;
                        }
                    }
                }
            }
            return true;
        }
        return false;
    }

    /**
     * 判斷一位數(shù)是否是小數(shù)
     */
    public boolean isDecimal(String str) {
        if (isContains(str, "."))
            return true;
        else
            return false;
    }

    /**
     * 是否包含某一個(gè)運(yùn)算符
     */
    public boolean isContains(String value, String contain) {
        if (value.indexOf(contain) == -1)
            return false;
        else
            return true;
    }

    /**
     * 最后一個(gè)值是數(shù)字就加符號(hào),不是數(shù)字則替換它
     * @param str 符號(hào)
     */
    public String isNum(String content,String str) {
        if (isNumEnd(content)) content += str;
        else content = content.substring(0, content.length() - 1) + str;
        return content;
    }

    /**
     * 第一個(gè)值是0,輸入整數(shù)則替換掉
     */
    public String isZero(String content,String str) {
        if (content.equals("0")) {
            content = str;
        } else {
            content += str;
        }
        return content;
    }

    /**
     * 得到第一個(gè)值是否是數(shù)字
     */
    public boolean isNumStart(String str) {
        if (str.startsWith("+") || str.startsWith("x") || str.startsWith("÷") || str.startsWith("%") || str.equals("")) {
            return false;
        }
        return true;
    }

    /**
     * 得到最后一個(gè)值是否是數(shù)字
     */
    public boolean isNumEnd(String str) {
        char[] chars = str.substring(str.length() - 1, str.length()).toCharArray();
        if (!Character.isDigit(chars[chars.length - 1])) {
            return false;
        }
        return true;
    }
}
}
}

GIF演示實(shí)現(xiàn)效果

  • Phone 設(shè)備實(shí)現(xiàn)效果
  • Pad 設(shè)備實(shí)現(xiàn)效果
  • TV 設(shè)備實(shí)現(xiàn)效果
  • Wearable 設(shè)備實(shí)現(xiàn)效果
    目前所有設(shè)備中,Wearable是幾個(gè)設(shè)備中最不好適配、最難適配的設(shè)備,但,想實(shí)現(xiàn)也并非不可能。
    如果繼續(xù)適配Wearable,目前能想到Wearable屏幕適配的方法有三種:
    1、需要將背景換成一個(gè)圓,按鈕都放進(jìn)一個(gè)自動(dòng)換行的組件。只是,這個(gè)想法不是很現(xiàn)實(shí),Android的RecycleView組件也只是一行固定多少個(gè)才會(huì)換行,HarmonyOS的ListContainer組件能否實(shí)現(xiàn)效果還是個(gè)未知數(shù)。
    2、使用他人開(kāi)源的屏幕適配框架。不過(guò),這個(gè)很遺憾,截止至發(fā)稿,還未能了解到有相關(guān)的適配框架。
    3、另外寫(xiě)一個(gè)適配Wearable的布局。在onState方法執(zhí)行super.setUIContent前更換專(zhuān)門(mén)為Wearable而寫(xiě)的xml,如:
@Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // wearable設(shè)備換一個(gè)布局
        if (DeviceInfo.getDeviceType().equals("wearable")){
            super.setUIContent(Wearable布局);
        }else{
            super.setUIContent(ResourceTable.Layout_ability_main);
        }
    }
    }
}

Car 實(shí)現(xiàn)效果

截止至發(fā)稿,Car還沒(méi)有開(kāi)放對(duì)應(yīng)的機(jī)型,沒(méi)能使用遠(yuǎn)程真機(jī)進(jìn)行測(cè)試查看最終效果。這個(gè)效果圖也只是點(diǎn)擊Previewer進(jìn)行查看的樣式及效果。

Previewer注意事項(xiàng):

1、點(diǎn)擊Previewer查看xml,偶爾點(diǎn)擊xml的一些樣式并不會(huì)有響應(yīng),需要關(guān)閉Previewer并重新打開(kāi)。

2、Previewer展示的樣式不會(huì)顯示ToastDialog等對(duì)話框、不會(huì)打印日志、不能點(diǎn)擊Debug進(jìn)行測(cè)試,還是使用真機(jī)測(cè)試真機(jī)測(cè)試香。

此次是我自HarmonyOS的DevEco Studio開(kāi)發(fā)工具發(fā)布以來(lái)第一次開(kāi)發(fā)的APP,身為一個(gè)Android開(kāi)發(fā)工程師,做起HarmonyOS開(kāi)發(fā)并不是很難,其中有很多東西都類(lèi)似。DevEco Studio的遠(yuǎn)程真機(jī)測(cè)試與Previewer,效果杠杠的,要知道網(wǎng)上很多遠(yuǎn)程真機(jī)測(cè)試可都是收費(fèi)制,且按使用時(shí)間收費(fèi),這一功能的出現(xiàn)可降低了不少開(kāi)發(fā)費(fèi)用。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 測(cè)試
    +關(guān)注

    關(guān)注

    8

    文章

    5961

    瀏覽量

    130499
  • 開(kāi)發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    376

    瀏覽量

    41967
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2779

    瀏覽量

    45213
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2144

    瀏覽量

    35370
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    QCon·上海站HarmonyOS開(kāi)發(fā)者技術(shù)分論壇:共探鴻蒙開(kāi)發(fā)新機(jī)遇

    當(dāng)前,AI 技術(shù)重構(gòu)開(kāi)發(fā)邏輯、多設(shè)備協(xié)同成為技術(shù)主流,鴻蒙開(kāi)發(fā)能力正迎來(lái)從“能用好用”到“實(shí)用便捷”的關(guān)鍵躍遷。10月24日,2025年QCon全球軟件開(kāi)發(fā)大會(huì)上海站
    的頭像 發(fā)表于 10-24 15:59 ?559次閱讀
    QCon·上海站<b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)</b>者技術(shù)分論壇:共探<b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)</b>新機(jī)遇

    HarmonyOS 5】鴻蒙應(yīng)用隱私保護(hù)詳解

    HarmonyOS 5】鴻蒙應(yīng)用隱私保護(hù)詳解 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:30 ?834次閱讀

    HarmonyOS 5】鴻蒙中常見(jiàn)的標(biāo)題欄布局方案

    HarmonyOS 5】鴻蒙中常見(jiàn)的標(biāo)題欄布局方案 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:30 ?581次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】<b class='flag-5'>鴻蒙</b>中常見(jiàn)的標(biāo)題欄布局方案

    HarmonyOS 5】鴻蒙中進(jìn)度條的使用詳解

    HarmonyOS 5】鴻蒙中進(jìn)度條的使用詳解 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:26 ?593次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】<b class='flag-5'>鴻蒙</b>中進(jìn)度條的使用詳解

    HarmonyOS 5】鴻蒙星閃NearLink詳解

    HarmonyOS 5】鴻蒙星閃NearLink詳解 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:24 ?1242次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】<b class='flag-5'>鴻蒙</b>星閃NearLink詳解

    HarmonyOS 5】鴻蒙mPaaS詳解

    HarmonyOS 5】鴻蒙mPaaS詳解 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:23 ?582次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】<b class='flag-5'>鴻蒙</b>mPaaS詳解

    HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐

    HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS S
    的頭像 發(fā)表于 07-11 18:20 ?662次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】金融應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>鴻蒙</b>組件實(shí)踐

    HarmonyOS 5】鴻蒙中的UIAbility詳解(二)

    HarmonyOS 5】鴻蒙中的UIAbility詳解(二) ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:17 ?603次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】<b class='flag-5'>鴻蒙</b>中的UIAbility詳解(二)

    HarmonyOS 5 入門(mén)系列 】鴻蒙HarmonyOS示例項(xiàng)目講解

    HarmonyOS 5 入門(mén)系列 】鴻蒙HarmonyOS示例項(xiàng)目講解 ##鴻蒙開(kāi)發(fā)能力 ##Har
    的頭像 發(fā)表于 07-07 11:57 ?695次閱讀
    【 <b class='flag-5'>HarmonyOS</b> 5 入門(mén)系列 】<b class='flag-5'>鴻蒙</b><b class='flag-5'>HarmonyOS</b>示例項(xiàng)目講解

    HarmonyOS入門(mén)指南

    1、文檔與教程 HarmonyOS開(kāi)發(fā)文檔-應(yīng)用開(kāi)發(fā)導(dǎo)讀 OpenHarmony--應(yīng)用開(kāi)發(fā)導(dǎo)讀 倉(cāng)頡編程語(yǔ)言官網(wǎng) 華為開(kāi)發(fā)者博客 華為
    的頭像 發(fā)表于 06-27 00:11 ?477次閱讀

    HarmonyOS 5】鴻蒙中的UIAbility詳解(三)

    HarmonyOS 5】鴻蒙中的UIAbility詳解(三) ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 06-14 22:32 ?401次閱讀

    京東開(kāi)源Taro on HarmonyOS C-API版本

    近日,京東正式開(kāi)源了Taro on HarmonyOS C-API 版本,為鴻蒙應(yīng)用跨端開(kāi)發(fā)提供高性能框架。這次版本的發(fā)布,帶來(lái)了更豐富的樣式適配、更高效的渲染性能、更全面的組件支持,
    的頭像 發(fā)表于 06-09 09:19 ?866次閱讀
    京東開(kāi)源Taro on <b class='flag-5'>HarmonyOS</b> C-API版本

    HarmonyOS 應(yīng)用開(kāi)發(fā)賦能套件:鴻蒙原生應(yīng)用開(kāi)發(fā)的 “神助攻”

    的課程、文檔、樣例代碼等資源,在開(kāi)發(fā)者旅程各階段提供全方位的支持。開(kāi)發(fā)者可以通過(guò)鴻蒙開(kāi)發(fā)者官網(wǎng)一站式獲取HarmonyOS賦能套件。 感知階
    發(fā)表于 02-17 16:37

    名單公布!【書(shū)籍評(píng)測(cè)活動(dòng)NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應(yīng)用開(kāi)發(fā)實(shí)踐

    開(kāi)發(fā)的核心技術(shù),以及鴻蒙應(yīng)用在實(shí)際開(kāi)發(fā)中的應(yīng)用方法。 本書(shū)共分為四篇,共計(jì)16章,分別為鴻蒙開(kāi)發(fā)基礎(chǔ)篇、
    發(fā)表于 01-20 16:53

    HarmonyOS第一課》煥新升級(jí),賦能開(kāi)發(fā)者快速掌握鴻蒙應(yīng)用開(kāi)發(fā)

    HarmonyOS第一課》煥新升級(jí),賦能開(kāi)發(fā)者快速掌握鴻蒙應(yīng)用開(kāi)發(fā) 隨著HarmonyOS NEXT發(fā)布,
    發(fā)表于 01-02 14:24