国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

非全屏 Weex 頁面開發中的 Android 適配

gxyz / 965人閱讀

摘要:代碼中的高度和寬度的單位均為,然而,在手機屏幕上顯示的高寬卻不一定與代碼指定的相同。原因是框架在底層做了針對不同屏幕的適配工作,具體計算公式為實際高寬代碼高寬屏幕寬度。

weex代碼中的高度和寬度的單位均為px,然而,在手機屏幕上顯示的高寬卻不一定與代碼指定的相同。原因是weex框架在底層做了針對不同屏幕的適配工作,具體計算公式為 實際高寬 = 代碼高寬 * (屏幕寬度 / 750)。

舉個例子,假設代碼中是這么寫的:

那么,在一款屏幕分辨率為1920*1280的Android手機上,此時的計算過程為:
height: 100 * (1080 / 750) = 144;
width: 200 * (1080 / 750) = 288。

如果我們開發的weex頁面是全屏幕的,那么這個高寬的轉換過程對我們而言是透明的,無需做額外的工作。然而一旦有一個業務場景,weex容器并非是全屏幕的,而是需要從外部傳入weex容器的高度,那么,就不得不考慮這個轉換的過程。

舉一個我在開發weex彈窗時的例子。該weex彈窗的樣式如下:

可以看到,如果不考慮多屏幕適配,頂欄和底欄都是一個固定值,那么只需要用總容器高度 - 兩個定高組件就可以了。那么需要解決的第一個問題,就是如何獲取外部容器的高度。由于weex可以通過$getConfig().env.deviceHeight$getConfig().env.deviceWidth的形式來獲取手機屏幕的高度,因而,很自然地就想到,是否能在安卓中以屏幕的3/5的比例,約定容器高度,然后在weex代碼中,同樣通過3/5來計算容器高度。這樣就避免了去寫 Native Module 和 Method。

然而,這樣的思路是不可行的。因為Android Native的總高度,事實上是可供顯示的全屏高度,而不一定是物理屏幕的高度,因為有狀態欄,虛擬按鍵欄,Smartbar等等安卓碎片化引入的額外顯示元素,實際全屏高度很有可能小于物理屏幕高度。所以,仍然需要開發和注冊Native Module,以獲取外部容器高度。

再來看上文的計算公式:總容器高度 - 兩個定高 = scroller高度。因為多屏幕適配的原因,上面的公式是不可行的,需要改為:

外部傳入的總容器高度 - 兩個定高組件的高度字面量 * 轉換比例 = scroller實際高度

也就是說:外部傳入的總容器高度 / 轉換比例 - 兩個定高組件的高度字面量 = scroller實際高度 / 轉換比例 = scroller的字面量高度。

所以,最終的業務代碼如下所示:

        ready:function() {
            ...
            // 引入外部注冊的 Native Module;Android 和 iOS 各有其實現
            var AppInfo = require("@weex-module/MSOAFoundation");
            if (this.$getConfig().env.platform != "iOS") {
              // 適配 Android
              this.mainExtra = "mainExtraAndroid";
              AppInfo.getContainerHeight(function(params) {
                ratio = this.$getConfig().env.deviceWidth / 750;
                this.scrollerHeight = params.height / ratio - 200;
              }.bind(this));
            } else {
              // 適配 iPhone 4S
              if (this.$getConfig().env.deviceHeight < 1000) {
                this.scrollerHeight = 700;
              }
            }
            ...
        }

這個坑非常的隱蔽,本質是因為:weex 默默做了A參考系轉換到B參考系的過程,然而一旦我們自力更生,試圖從B參考系獲得一個測量得到的高度,用在A參考系,而沒意識到這個隱蔽的轉換過程的時候,就會陷入到一臺機子上調好了,另一臺又跪了的尷尬局面。而且,這種情況在Android上遠較iOS要來的嚴重。因為iOS上,除了4S以外,5,5s,6,6p,6s,6sp,屏幕尺寸均為同一長寬比。因此,在一臺上調整好后,可無縫等比例放大到其他機型上。然而在Android上,毋論碎片化的屏幕尺寸,光status bar,navigation bar,smartbar等等虛擬的占用實際顯示區域的各類bar,就足夠讓weex的默認適配喝一壺的。因此,weex這種隱蔽適配的處理方式,在Android生態上是否真的合理方便,尚待商榷。

====================================

如果您覺得我的文章對您有所啟迪,請點擊文末的推薦按鈕,您的鼓勵將會成為我堅持寫作的莫大激勵。 by DesGemini

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80602.html

相關文章

  • 加推Weex實踐之路(上)

    摘要:我們參考小程序的設計思路進行了優化升級,為每一個需要特有化配置的頁面添加一個格式的配置文件,配置文件包括導航欄的配置頁面級別的配置跳轉的配置等,將配置工程化標準化。設置導航欄按鈕包含按鈕樣式的數組通過完成按鈕事件的回調。一、背景1.為什么是Weex在公司快速發展的大環境下,App的更新迭代高速、高頻,技術團隊平均兩周便可誕生一款中型App,但App團隊只有6個人(iOS 、Android各3...

    shuibo 評論0 收藏0
  • 提升Android手機主要視頻應用全屏播放的觀看體驗

    摘要:為了給用戶帶來多媒體方面的體驗福利,一刻也不能停,現在要提升主要視頻應用全屏播放的觀看體驗。 為了給用戶帶來多媒體方面的體驗福利,一刻也不能停,現在要提升主要視頻應用全屏播放的觀看體驗。 提升主要視頻應用全屏播放的觀看體驗老板撂下一句話后拂袖而去,剩下的自己體會。經過人工智能的大腦快速處理,提取了幾個比較關鍵的技術點。 1.視頻應用,如何判斷到視頻應用在工作? 2.全屏播放,如何判斷視...

    raise_yang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<