在使用Xamarin Forms 开发UI的时候,因为是跨平台开发,一套代码多平台呈现相同的效果。但是有时无法满足需求,因此有的时候必须要针对不同的平台展现不同的效果。比如说安卓默认的背景色是暗黑色,而iOS默认为白色,如果设置了一个白色的Label ,岂不是看不见了。这种时候我们应该怎么做呢?
Xamarin Forms 提供了一种自定义渲染的技术,它可以使你的控件在不同的平台展现不同的效果。通常它跟自定义控件有异曲同工之妙,因为都是对控件样子的一种拓展。另外,对于不同的平台,有了渲染器这个工具后,可以对页面风格进行一些小小的改动,并且对每个平台的同一页面做得更加精致。那接下来就看看如何实现这样的效果吧。
(1)与自定义控件相同,我们需要先在跨平台项目中新创建一个类,此类必须是公有的,而且必须得继承原生控件,比如这里继承了Label控件,并创建了其构造函数。
(2)在MainPage.xaml中定义一个MyLabel,并初始化其背景色为天蓝色。
(3)在安卓子项目上右键--添加一个类,这里命名为MyLabelRender,表示是MyLabel渲染的类,注意该类必须要继承LabelRenderer。如果是对Entry的渲染,那这里继承的就是EntryRenderer。在该类中重写了OnElementChanged方法,并将控件的背景颜色设置为Red红色。继承渲染器的同时一定要重写OnElementChanged方法,该方法的作用是创建平台视图元素,会在MyLabel初始化时调用。
在namespace上方给渲染器添加ExportRenderer特性,可以理解为绑定:在调用MyLabel时,会在相应的平台下找到MyLabel的渲染器(MyLabelRender),通过该渲染器对控件作出进一步的改进。注意这里一定要为定义好的渲染器(MyLabelRender)添加该程序集特性,标记在命名空间块之外。另外,这里需要根据提示引入Xamarin.Forms和
Xamarin.Forms.Platform.Android命名空间。另外还有Android子项目的命名空间。
在手机或者虚拟机上部署一下可以看到效果:位于屏幕中央的一个背景颜色为红色的Label控件。说明渲染器在安卓平台下进行了有效的渲染。