關于 Xamarin 的那些事(四)-Xamarin Forms

最近有個新項目是開發(fā)一個 iOS 應用,但由于我沒有任何 iOS 的開發(fā)經(jīng)驗,學習 iOS 開發(fā)也要花很多時間,所以決定試試使用 Xamarin Forms (XF)來開發(fā)一個 iOS 應用,沒想到效果出奇的好,因此打算來分享一下一些 XF 的開發(fā)經(jīng)驗。

XF 是一套跨平臺的開發(fā)框架,只需要編寫一次代碼,包括界面代碼,就能分別生成 Android、iOS、UWP 的原生應用。雖然各個平臺生成出來的界面各有差異,但使用的是各平臺的原生控件,使用體驗也很不錯。不過呢,也因為每個平臺上的特性都是不一樣的,因此 XF 也不可能支持所有平臺的屬性,這時候就需要編寫 Renderer 來針對平臺定義特性與效果。

比如說,XF 里的 TabbedPage,就是帶分頁的頁面,那個分頁欄在不同平臺上的實現(xiàn)方法都是不一樣的,在 iOS 使用的是 UITabBar,Android 使用的是 TabLayout,UWP 上的是 Pivot。UITabBar 支持設定分頁選中時的顏色(TintColor),但 XF 中并沒有提供相關的功能,因此需要自己編寫 Renderer 來實現(xiàn)(也有其他方法實現(xiàn),這里只針對 Renderer 說明)。


這是一個 iOS TabbedPage 的 Renderer 示例,簡單說明一下如何實現(xiàn)自定義控件屬性(雖然 XF 不支持某些屬性,但 Xamarin.Android 和 Xamarin.iOS 是支持所有該平臺上的控件屬性的),我們只需要繼承 XF 已經(jīng)定義好的 TabbedRenderer,再針對 TabBar 屬性修改,就可以基于原來的效果來自定義屬性,其他的控件也可以用類似的方法來定義特定平臺上的效果。
<pre>`
[assembly: ExportRenderer(typeof(TabbedPage), typeof(TabbedPageRenderer))]
namespace FormsDemo.iOS.Renderers {
public class TabbedPageRenderer : TabbedRenderer {
protected override void OnElementChanged(VisualElementChangedEventArgs e) {
base.OnElementChanged(e);

        TabBar.TintColor = UIColor.White;
        TabBar.UnselectedItemTintColor = UIColor.FromRGBA(255, 255, 255, 160);
    }
}

}
`</pre>

未完待續(xù)。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,233評論 25 708
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,439評論 4 61
  • 文/冰紫嫣 我獨自穿越一整個沙漠,只為了尋找夢中那一枚干凈的貝殼,在紛擾的人間像一只迷途的羔羊被你的愛牽引至...
    冰紫嫣原創(chuàng)閱讀 506評論 0 4
  • 特別習慣的,每天打開Mac,寫。 我想起一個上說,為什么我們會寫日記,我想其實是因為我這一類人的大腦就喜歡傾訴,你...
    Zenith_Swimmer閱讀 460評論 0 1

友情鏈接更多精彩內(nèi)容