源码地址:https://github.com/l2999019/DemoAppgit
能够Star一下,随意 - -github
本篇..基本能够算是Xamarin在应用开发过程当中的核心了..真的很很很重要..框架
想学习的..想用的..建议仔细阅读..嗯..打酱油的 ..快速滑倒下面点个推荐 - - 哈哈哈...ide
只讲一个,关于Xamarin.Forms针对各个平台如何进行可定制化的控件操做.布局
也就是针对某个平台的细颗粒化操做.post
废话很少说,咱们直接开始.学习
自定义渲染器提供了一种强大的方法来定制Xamarin.Forms控件的外观和行为。它们可用于一些微小的样式更改或复杂的平台特定布局和行为定制。优化
由于在不使用自定义渲染器的状况下更改Xamarin.Forms控件的外观是颗粒度较粗的.spa
由于Xamarin.Forms为了支持多个平台同时可用,因此对一些特定平台的加强功能和自定义功能进行了删减。因此当咱们须要使用这些功能时,就必须实现自定义渲染器。
下面咱们首先来经过一个例子来说解如何使用渲染器.
咱们找到一个Xamarin控件,好比ProgressBar进度条..它在Xamarin中,可控的属性应该就只有Progress进度而已..
咱们编写代码以下:
<ProgressBar Progress=".5" BackgroundColor="Blue" />
获得以下效果:
这里,咱们特地给它加了一个蓝色的背景..来展现整个控件的大小..
咱们会发现,进度条只是他里面很小的一部分,大部分被背景占用,并且没法在Xamarin.Forms中去修改,咱们没法改变它的高度.
那么,咱们如何修改它呢?..这时候就要用自定义渲染器了,到特色的平台去优化它
首先咱们在可移植的库中自定义一个ProgressBar,方便Xamarin.Forms调用,代码以下:
public class MyProgressBar: ProgressBar { }
就这样,就足够了,咱们只须要继承一下原来的ProgressBar便可..
而后咱们到安卓的平台下,添加自定义的渲染器.,记得,是安卓的平台,在这个类库下:
添加渲染器,代码以下:
//表示使用 Xamarin.Forms在使用MyProgressBar的时候,用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个关键的地方,一个是须要在命名空间上申明,你须要代替渲染的控件.
第二个是,你须要继承相关的渲染基类,好比咱们这里用的ProgressBarRenderer
咱们能够看看这里基类里面继承了一些什么,以下:
咱们能够看到,在安卓库中,它就继承了安卓widget的原生进度条,那么,原生进度条的全部属性,咱们就都是能够用的了.
好比咱们在代码中写的 "ScaleY" 这种属性和SetPadding这种方法.,因此前面我一直强调的,有些东西 你找了安卓(IOS)的解决方案,就一样找到了Xamarin的
我这里虽然没有IOS的环境,可是咱们也能够到IOS里面看看ProgressBarRenderer继承了什么,以下:
熟悉IOS开发的同窗应该很清楚了..Uikit..就是IOS的用户界面
在上面的代码中,咱们针对安卓平台,修改了他的Y轴高度和内边距的值,咱们如何使用呢?以下:
<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>
咱们在ContentPage 中,先引入咱们自定的命名空间,调用名改成loact.
而后就直接loact:MyProgressBar,就能够了和原来几乎没区别.
而后咱们看看运行效果,以下:
咱们能够看到,虽然咱们也给了红色的背景,可是它只显示在进度条中了,不会让控件很高, SetPadding起了做用.
固然,咱们能操做的远远不止这些..
下面直接给上一个我搭好的基础框架的效果吧...嗯 还使用了一下百度地图的原生SDK.
嗯..也没啥好说的了. 后面慢慢加深.
.最后,谢谢各位的支持,喜欢请点个推荐