【譯】Fuse入門(三)

UI 組件

Fuse里有大量現(xiàn)成的UI組件可以用來構(gòu)建用戶界面(User interface)。 在UX文件里默怨,添加UI組件很容易,只需要標(biāo)簽化它們即可,像這樣:

<Image File="MyImage.png" />
<Rectangle Width="50" Height="50" Fill="#888" />
<Text>Hello world!</Text>

注意并不是括在標(biāo)簽內(nèi)就都是UI組件姆钉,還有的是觸發(fā)器(Triggers)和動(dòng)作(Actions)。

文本 Text

先來個(gè)渲染文本的小App:

<App>
    <Text>Hello, world!</Text>
</App>

簡單搞定是不是抄瓦? 但是當(dāng)有大段文字需要顯示時(shí)潮瓶,最好開啟文本包TextWrapping屬性:

<Text TextWrapping="Wrap">Lorem Ipsum(...)</Text>

如果文字太多,TextWrapping也搞不定钙姊,那你就得考慮把內(nèi)容放進(jìn)ScrollView滾動(dòng)視圖中毯辅,或者是改變字體大小。TextWrapping有兩個(gè)設(shè)定值煞额,缺省是“NoWrap”思恐,另一個(gè)是“Wrap”沾谜。

字體 Fonts

你可以導(dǎo)入ttf字庫文件,就是TrueType fonts胀莹。字體被指定后基跑,一般都會(huì)在App里自始至終的使用,所以最好給它創(chuàng)建一個(gè)全局源:

<App>
    <Font File="Roboto-Medium.ttf" ux:Global="Medium" />
    <Font File="Roboto-Light.ttf" ux:Global="Light" />
    <StackPanel>
        <Text Font="Light">Roboto Light</Text>
        <Text Font="Medium">Roboto Medium</Text>
        <Text Font="Light">Roboto Light again</Text>
    </StackPanel>
</App>

在上面這個(gè)例子里描焰,字庫文件和相關(guān)的UX文件被放在同一目錄里媳否,這樣可以保證整個(gè)項(xiàng)目都可以使用該字庫,而且只需加載一次荆秦。

iOS和安卓都支持用多字節(jié)字符集(Multibyte character sets)來渲染文字篱竭,這表示在設(shè)備上能正常渲染表情符號(hào)(emojis)。

備注:目前在桌面的預(yù)覽窗口里渲染多字節(jié)字符集還有些問題萄凤,所以遇上桌面預(yù)覽與設(shè)備上的預(yù)覽不盡相同的情況室抽,別意外,我們正在解決靡努。

文本屬性 Text properties

如需對(duì)文字渲染有更多控制坪圾,你可以設(shè)置TextAlignmentTextColor惑朦、FontSizeLineSpacing這些屬性:

<Text TextColor="#999">Left</Text>
<Text TextAlignment="Center">Center</Text>
<Text FontSize="24" TextAlignment="Right">Right</Text>
<Text LineSpacing="10">
Multiple
Lines
</Text>

逐條解釋一下上面這個(gè)例子兽泄,第一行文字元素缺省是左對(duì)齊,文字顏色設(shè)為淺灰色漾月。第二行文字是居中對(duì)齊病梢。第三行文字是右對(duì)齊并字號(hào)設(shè)為較大的24號(hào)。第四行代碼是兩行文字梁肿,行間距被設(shè)為10點(diǎn)蜓陌。TextAlignment的有效設(shè)定值有Left(默認(rèn))、RightCenter吩蔑。

數(shù)字 Number

雖然大部分情況是處理文字钮热,但有時(shí)也需要對(duì)數(shù)字進(jìn)行格式化,這就得用到Format屬性烛芬,具體這些格式參見微軟網(wǎng)站上的這張表隧期。

目前Fuse只支持F格式(Fixed-Point), 就是指定數(shù)字精確到小數(shù)點(diǎn)后幾位數(shù)。

下面代碼會(huì)顯示為3.141

<Number Value="3.14159265359" Format="F03" />

圖像 Image

顯示一個(gè)圖片:

<App>
    <Image File="FuseLogo.png" />
</App>

上面的代碼假設(shè)FuseLoge.png文件與UX文件在同一目錄赘娄,如果要從互聯(lián)網(wǎng)上加載圖片仆潮,如下所示:

<Image Url="http://path_to_image" />

備注:如果你做網(wǎng)頁開發(fā)多年,習(xí)慣使用src設(shè)定URL地址遣臼,需要注意這里性置,雖然Image有一個(gè)Source屬性,用來設(shè)定一個(gè)圖片的來源揍堰,這個(gè)Resource就是HttpImageSource鹏浅,但是那是Fuse在背后來創(chuàng)建的辟灰,所以你要記住的是,堅(jiān)持使用Url來加載網(wǎng)絡(luò)圖片篡石。

指定圖像源的幾種方法

還有其它的加載圖像數(shù)據(jù)的方法芥喇,這里是一個(gè)用到JavaScript做數(shù)據(jù)綁定的例子:

<FileImageSource ux:Key="pic2" File="Images/Image2.jpg" />
<StackPanel>
    <JavaScript>
        module.exports = {
            imageResource: "pic2",
            url: "http://somewhereontheinternet/Cute-Cat.jpg"
        }
    </JavaScript>
    <Image File="Images/Image1.jpg" />
    <Image Source="{DataToResource imageResource}" />
    <Image Url="{url}" />
</StackPanel>

上面的代碼將三張圖片上下排列。最上面的圖片就是簡單的取自項(xiàng)目中的一個(gè)文件(Image1.jpg)凰萨。第二張圖片继控,首先在第一行代碼中使用 FileImageSource來引用了一個(gè)文件(Image2.jpg),然后用DataToResource來做數(shù)據(jù)綁定胖眷,這會(huì)從JavaScript代碼中找出并取出一個(gè)鍵值作為來源武通。最后,我們?nèi)〉靡粋€(gè)網(wǎng)上圖片的URL網(wǎng)址并使用Url屬性與另一個(gè)Image綁定珊搀。如果這些代碼看起來有些復(fù)雜冶忱,不要緊,我們?cè)诤竺嬖敿?xì)說說數(shù)據(jù)綁定Data Binding, 還有JavaScript境析。

圖片上色

給一個(gè)Image染個(gè)色是可以的囚枪,使用Color屬性即可。注意劳淆,此法主要作用于圖片中最接近白色的部分链沼,所以想好了效果再用,看下面的例子:

<Image File="WhiteIcon.png" Color="#f00" />

這行代碼將一個(gè)白色圖標(biāo)變成了紅色沛鸵。

拉伸模式 StretchMode

當(dāng)一個(gè)Image被置入一個(gè)容器(container), 它默認(rèn)會(huì)盡可能的占用最大顯示面積括勺,但如果圖片的寬高比與容器的不一樣,那么容器會(huì)有部分留白曲掰。

通過給Image設(shè)置不同的StretchMode屬性疾捍,我們可以用多種不同方式來處理這個(gè)問題,如下所示:

  • Fill - 填充全部容器空間栏妖,不管寬高比了乱豆。
  • PixelPrecise - 以圖片的像素為單元,確保圖片在所有設(shè)備上都保持晰利底哥,這意味著在不同分辨率的設(shè)備上咙鞍,圖片的顯示大小會(huì)不一樣房官。該選項(xiàng)會(huì)忽略容器的大小趾徽。
  • PointPrecise - 以點(diǎn)位單位保持圖片的大小,以保證圖片在所有設(shè)備上顯示的都一樣翰守,一般會(huì)忽略掉容器大小孵奶,舉例說,64 X 64像素大小的圖片蜡峰,在設(shè)備上就精確控制在64 X 64 點(diǎn)的大小了袁。
  • PointPrefer - 綜合了PointPrecisePixelPrecise模式朗恳,該模式優(yōu)先用PointPrecise使圖片保持正確的大小,在PixelPrecise大約能創(chuàng)建大小合適的“on screen”圖像的情況下载绿,則該模式會(huì)使用PixelPrecise來提升圖片的顯示清晰度粥诫。
  • Scale9 - 該模式根據(jù)的是圖片的Scale9Margin設(shè)定來拉伸顯示圖片,該設(shè)定決定哪些像素被拉伸及拉伸多少崭庸。Scale9Margin將圖片分為9部分怀浆,四角部分會(huì)保持原始的寬高比,剩下的部分會(huì)根據(jù)圖片所需顯示的大小而進(jìn)行拉伸怕享。
  • Uniform - 此模式是在保持圖片原始寬高比不變的情況下执赡,最大化地顯示圖片,這經(jīng)常會(huì)沒法是圖片覆蓋整個(gè)容器函筋。
  • UniformToFill - 保持圖片的寬高比的情況下沙合,顯示覆蓋整個(gè)容器,這通常會(huì)發(fā)生容器裁掉部分圖片的情況跌帐。

拉伸方向 StretchDirection

你可以通過StretchDirection屬性來設(shè)置拉伸方向:

  • Both - 同時(shí)上下拉伸
  • UpOnly - 只能上拉伸
  • DownOnly - 只能下拉伸

內(nèi)容對(duì)齊 ContentAlignment

在使用StretchModeStretchDirection屬性的情況下首懈,多多少少會(huì)發(fā)生圖片四邊形與顯示后四邊形大小不符的情況,那我們提供如下對(duì)齊選項(xiàng):

  • Default
  • Left
  • HorizontalCenter
  • Right
  • Top
  • VerticalCenter
  • Bottom
  • TopLeft
  • TopCenter
  • TopRight
  • CenterLeft
  • Center
  • CenterRight
  • BottomLeft
  • BottomCenter
  • BottomRight

圖片來源

圖片來源可以直接在Image中用FileUrl屬性來標(biāo)明谨敛,這么做猜拾,在圖片生命時(shí)間的多個(gè)方面會(huì)少了一些控制。

換個(gè)方式佣盒,使用ImageSource對(duì)象挎袜,你可以只在一個(gè)地方給一個(gè)圖片文件命名,把它當(dāng)作資源肥惭,然后在項(xiàng)目的任何地方復(fù)用盯仪,這樣就不會(huì)搞得到處是相同的路徑和元數(shù)據(jù)這類信息。

下面的代碼聲明了一個(gè)圖片為一個(gè)資源:

<FileImageSource ux:Global="CloseIcon" File="close.png" Density="2" />

然后你就可以在項(xiàng)目的任何地方蜜葱,使用這個(gè)名為CloseIcon的資源了:

<Image Source="CloseIcon" />

Fuse目前支持如下圖片源類型:

  • FileImageSource - 指定一個(gè)本地圖片全景,并可以設(shè)定其密度值。
  • HttpImageSource - 從一個(gè)URL網(wǎng)址指定一個(gè)圖片牵囤,并可以設(shè)定其密度值爸黄。
  • MultiDesityImageSource - 同一個(gè)圖像內(nèi)容,給不同DPI的設(shè)備屏幕指定不同的分辨率的版本揭鳞。

另外炕贵,下面的類可以讓你更進(jìn)一步配置圖片來源:

MemoryPolicy - 當(dāng)顯示完圖片后,不在用它時(shí)野崇,該類可以讓你控制圖片數(shù)據(jù)在內(nèi)存里的保留時(shí)間称开。

MultiDensityImageSource

現(xiàn)在市面上有非常廣泛不同規(guī)格的手持設(shè)備,有很多不同DPI的屏幕,F(xiàn)use可以讓你在一個(gè)Image標(biāo)簽里指定不同密度的圖片文件:

<Image StretchMode="PointPrefer">
    <MultiDensityImageSource>
        <FileImageSource File="Icon.png" Density="1"/>
        <FileImageSource File="Icon.png@2x.png" Density="2"/>
    </MultiDensityImageSource>
</Image>

然后Fuse會(huì)為不同DPI的屏幕自動(dòng)適配圖片源鳖轰,并且會(huì)兼顧到圖片的拉伸模式設(shè)定清酥。

HttpImageSource

HttpImageSource - 可以讓你指定一個(gè)從網(wǎng)上用HTTP取來的圖片文件,并會(huì)異步顯示蕴侣。

<Image>
    <MultiDensityImageSource>
        <HttpImageSource Url="{image_url_1x}" Density="1"/>
        <HttpImageSource Url="{image_url_2x}" Density="2"/>
    </MultiDensityImageSource>
</Image>

或者焰轻,你想用一個(gè)固定密度的圖片,代碼就少了很多:

<Image Url="{image_url}" />

注意:從網(wǎng)上用HTTP取圖片需要些時(shí)間才會(huì)加載昆雀,在加載前鹦马,F(xiàn)use根本不知道圖片的尺寸,因此忆肾,當(dāng)App的布局是基于網(wǎng)上圖片的大小時(shí)荸频,你要格外小心。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末客冈,一起剝皮案震驚了整個(gè)濱河市旭从,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌场仲,老刑警劉巖和悦,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渠缕,居然都是意外死亡鸽素,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門亦鳞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馍忽,“玉大人,你說我怎么就攤上這事燕差≡馑瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵徒探,是天一觀的道長瓦呼。 經(jīng)常有香客問我,道長测暗,這世上最難降的妖魔是什么央串? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮碗啄,結(jié)果婚禮上质和,老公的妹妹穿的比我還像新娘。我一直安慰自己挫掏,他們只是感情好侦另,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布秩命。 她就那樣靜靜地躺著尉共,像睡著了一般褒傅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袄友,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天殿托,我揣著相機(jī)與錄音,去河邊找鬼剧蚣。 笑死支竹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸠按。 我是一名探鬼主播礼搁,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼目尖!你這毒婦竟也來了馒吴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤瑟曲,失蹤者是張志新(化名)和其女友劉穎饮戳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洞拨,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扯罐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烦衣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歹河。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖花吟,靈堂內(nèi)的尸體忽然破棺而出启泣,到底是詐尸還是另有隱情,我是刑警寧澤示辈,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布寥茫,位于F島的核電站,受9級(jí)特大地震影響矾麻,放射性物質(zhì)發(fā)生泄漏纱耻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一险耀、第九天 我趴在偏房一處隱蔽的房頂上張望弄喘。 院中可真熱鬧,春花似錦甩牺、人聲如沸蘑志。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽急但。三九已至澎媒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間波桩,已是汗流浹背戒努。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留镐躲,地道東北人储玫。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像萤皂,于是被迫代替她去往敵國和親撒穷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,182評(píng)論 25 707
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程裆熙,因...
    小菜c閱讀 6,426評(píng)論 0 17
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案桥滨? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評(píng)論 1 92
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件弛车、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,107評(píng)論 4 62
  • 長腿妹妹是班里的起床困難戶齐媒,因?yàn)榍皫滋炖迷绮贂r(shí)間加練理化生實(shí)驗(yàn),為了督促長腿妹妹和大家一起練實(shí)驗(yàn)纷跛。我以和長腿妹妹...
    阿拉小仙兒閱讀 180評(píng)論 0 0