C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件),附源码
本篇..基本可以算是Xamarin在應(yīng)用開(kāi)發(fā)過(guò)程中的核心了..真的很很很重要..
想學(xué)習(xí)的..想用的..建議仔細(xì)閱讀..嗯..打醬油的 ..快速滑倒下面點(diǎn)個(gè)推薦 - - 哈哈哈...
今天的學(xué)習(xí)內(nèi)容?
只講一個(gè),關(guān)于Xamarin.Forms針對(duì)各個(gè)平臺(tái)如何進(jìn)行可定制化的控件操作.
也就是針對(duì)某個(gè)平臺(tái)的細(xì)顆粒化操作.
廢話不多說(shuō),我們直接開(kāi)始.
?
正文
1.什么是渲染器
自定義渲染器提供了一種強(qiáng)大的方法來(lái)定制Xamarin.Forms控件的外觀和行為。它們可用于一些微小的樣式更改或復(fù)雜的平臺(tái)特定布局和行為定制。
2.為什么需要自定義渲染器
因?yàn)樵诓皇褂米远x渲染器的情況下更改Xamarin.Forms控件的外觀是顆粒度較粗的.
因?yàn)閄amarin.Forms為了支持多個(gè)平臺(tái)同時(shí)可用,所以對(duì)一些特定平臺(tái)的增強(qiáng)功能和自定義功能進(jìn)行了刪減。所以當(dāng)我們需要使用這些功能時(shí),就必須實(shí)現(xiàn)自定義渲染器。
3.如何使用自定義渲染器
下面我們首先來(lái)通過(guò)一個(gè)例子來(lái)講解如何使用渲染器.
我們找到一個(gè)Xamarin控件,比如ProgressBar進(jìn)度條..它在Xamarin中,可控的屬性應(yīng)該就只有Progress進(jìn)度而已..
我們編寫(xiě)代碼如下:
<ProgressBar Progress=".5" BackgroundColor="Blue" />得到如下效果:
這里,我們特意給它加了一個(gè)藍(lán)色的背景..來(lái)展示整個(gè)控件的大小..
我們會(huì)發(fā)現(xiàn),進(jìn)度條只是他里面很小的一部分,大部分被背景占用,而且無(wú)法在Xamarin.Forms中去修改,我們無(wú)法改變它的高度.
那么,我們?nèi)绾涡薷乃?..這時(shí)候就要用自定義渲染器了,到特點(diǎn)的平臺(tái)去優(yōu)化它
首先我們在可移植的庫(kù)中自定義一個(gè)ProgressBar,方便Xamarin.Forms調(diào)用,代碼如下:
public class MyProgressBar: ProgressBar { }就這樣,就足夠了,我們只需要繼承一下原來(lái)的ProgressBar即可..
然后我們到安卓的平臺(tái)下,添加自定義的渲染器.,記得,是安卓的平臺(tái),在這個(gè)類庫(kù)下:
添加渲染器,代碼如下:
//表示使用 Xamarin.Forms在使用MyProgressBar的時(shí)候,用MyProgressBarRenderer渲染替換[assembly: ExportRenderer(typeof(MyProgressBar), typeof(MyProgressBarRenderer))]namespace DemoApp.Droid { ?
?public class MyProgressBarRenderer:ProgressBarRenderer{ ? ? ?
??protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e){ ? ? ? ? ? ?base.OnElementChanged(e);Control.ScaleY = 10; //改變Y軸大小 ? ? ? ? ? Control.SetPadding(-0, -12, 0, -12);}} }
上面的代碼有2個(gè)關(guān)鍵的地方,一個(gè)是需要在命名空間上申明,你需要代替渲染的控件.
第二個(gè)是,你需要繼承相關(guān)的渲染基類,比如我們這里用的ProgressBarRenderer
我們可以看看這里基類里面繼承了一些什么,如下:
我們可以看到,在安卓庫(kù)中,它就繼承了安卓widget的原生進(jìn)度條,那么,原生進(jìn)度條的所有屬性,我們就都是可以用的了.
比如我們?cè)诖a中寫(xiě)的 "ScaleY" 這種屬性和SetPadding這種方法.,所以前面我一直強(qiáng)調(diào)的,有些東西 你找了安卓(IOS)的解決方案,就同樣找到了Xamarin的
我這里雖然沒(méi)有IOS的環(huán)境,但是我們也可以到IOS里面看看ProgressBarRenderer繼承了什么,如下:
熟悉IOS開(kāi)發(fā)的同學(xué)應(yīng)該很清楚了..Uikit..就是IOS的用戶界面
?
在上面的代碼中,我們針對(duì)安卓平臺(tái),修改了他的Y軸高度和內(nèi)邊距的值,我們?nèi)绾问褂媚?如下:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:loact="clr-namespace:DemoApp.MyRenderer"x:Class="DemoApp.ViewsDomePage"><ContentPage.Content><loact:MyProgressBar Progress=".6" BackgroundColor="Red" /><ProgressBar Progress=".5" BackgroundColor="Blue" MinimumHeightRequest="-20" HeightRequest="-1" /></ContentPage.Content></ContentPage>我們?cè)贑ontentPage 中,先引入我們自定的命名空間,調(diào)用名改為loact.
然后就直接loact:MyProgressBar,就可以了和原來(lái)幾乎沒(méi)區(qū)別.
然后我們看看運(yùn)行效果,如下:
我們可以看到,雖然我們也給了紅色的背景,但是它只顯示在進(jìn)度條中了,不會(huì)讓控件很高, SetPadding起了作用.
當(dāng)然,我們能操作的遠(yuǎn)遠(yuǎn)不止這些..
下面直接給上一個(gè)我搭好的基礎(chǔ)框架的效果吧...嗯?還使用了一下百度地圖的原生SDK.?
寫(xiě)在最后
嗯..也沒(méi)啥好說(shuō)的了. 后面慢慢加深.
相關(guān)文章:?
C#使用Xamarin開(kāi)發(fā)可移植移動(dòng)應(yīng)用(1.入門(mén)與Xamarin.Forms頁(yè)面),附源碼
.NET Standard@Xamarin.Forms
C#使用Xamarin開(kāi)發(fā)可移植移動(dòng)應(yīng)用(2.Xamarin.Forms布局,本篇很長(zhǎng),注意)附源碼
C#使用Xamarin開(kāi)發(fā)可移植移動(dòng)應(yīng)用(3.Xamarin.Views控件)附源碼
C#使用Xamarin開(kāi)發(fā)可移植移動(dòng)應(yīng)用(4.進(jìn)階篇MVVM雙向綁定和命令綁定)附源碼
C#使用Xamarin開(kāi)發(fā)可移植移動(dòng)應(yīng)用(5.進(jìn)階篇顯示彈出窗口與通訊中心)附源碼
原文地址:http://www.cnblogs.com/GuZhenYin/p/7428017.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件),附源码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Orleans配置---持久化
- 下一篇: C#使用Xamarin开发可移植移动应用