前言

系列目录

C#使用Xamarin开发可移植移动应用目录

源码地址:https://github.com/l2999019/DemoApp

可以Star一下,随意 - -

说点什么..

本篇..基本可以算是Xamarin在应用开发过程中的核心了..真的很很很重要..

想学习的..想用的..建议仔细阅读..嗯..打酱油的 ..快速滑倒下面点个推荐 - - 哈哈哈...

今天的学习内容?

只讲一个,关于Xamarin.Forms针对各个平台如何进行可定制化的控件操作.

也就是针对某个平台的细颗粒化操作.

废话不多说,我们直接开始.

正文

1.什么是渲染器

自定义渲染器提供了一种强大的方法来定制Xamarin.Forms控件的外观和行为。它们可用于一些微小的样式更改或复杂的平台特定布局和行为定制。

2.为什么需要自定义渲染器

因为在不使用自定义渲染器的情况下更改Xamarin.Forms控件的外观是颗粒度较粗的.

因为Xamarin.Forms为了支持多个平台同时可用,所以对一些特定平台的增强功能和自定义功能进行了删减。所以当我们需要使用这些功能时,就必须实现自定义渲染器。

3.如何使用自定义渲染器

下面我们首先来通过一个例子来讲解如何使用渲染器.

我们找到一个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 = ; //改变Y轴大小 Control.SetPadding(-, -, , -); }
}
}

上面的代码有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.

写在最后

嗯..也没啥好说的了. 后面慢慢加深.

.最后,谢谢各位的支持,喜欢请点个推荐

C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码的更多相关文章

  1. C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本篇..基 ...

  2. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯,前面讲 ...

  3. C#使用Xamarin开发可移植移动应用进阶篇(9.混淆代码,防止反编译)

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 今天讲讲如 ...

  4. C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练,来一份增删改查CRUD)

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 呃 也有半 ...

  5. Vue基础二之全局API、实例属性和全局配置,以及组件进阶(mixins)的详细教程(案列实现,详细图解,附源码)

    本篇文章主要是写Vue.directive().Vue.use()等常用全局API的使用,vm.$props.vm.$options.vm.$slots等实例属性的使用,以及Vue全局配置.组件的mi ...

  6. C#使用Xamarin开发可移植移动应用(3.进阶篇MVVM双向绑定和命令绑定)附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯..前面 ...

  7. C#使用Xamarin开发可移植移动应用(4.进阶篇MVVM双向绑定和命令绑定)附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯..前面 ...

  8. C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 没啥好说的 ...

  9. C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码

    前言 什么是Xamarin? Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单. Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows P ...

随机推荐

  1. js实现图片旋转、模板文件查看图片大图之记录篇[二]

    一个小小的前端需求送给大家,使用js实现图片旋转,并且点击图片能够实现规定格式的大图. 主要使用的是jQuery的delegate()方法实现图片旋转,该方法主要的功能就是给某个组件绑定一个或一组事件 ...

  2. spring注解@service("service")括号中的service有什么用

    相当于 xml配置中得 bean id = service 也可以不指定 不指定相当于 bean id = com. service.service 就是这个类的全限定名 好处是:同一个接口可以有多个 ...

  3. Servlet端 接收不到4096,8192长度的JSON参数

    Servlet端的日志显示,客户端传过来的JSON参数是空值. 但是在客户端的日志显示,已将JSON参数传送过去. 经调查发现,加减1位后的JSON参数均可以正常传送. 只有8192,4096长度的J ...

  4. 论Activity及启动模式,Fragment,Service的使用以及生命周期

    Activity: 这是我总结出来的,介于Activity生命周期相对较多,我在Google官方的生命周期图上又加了几个常用的,便于大家理解 对于ACtivity,先说说启动模式(ps:复制党去死吧, ...

  5. iOS App内存优化之 解决UIImagePickerController的图片对象占用RAM过高问题

    这个坑会在特定的情况下特别明显: 类似朋友圈的添加多张本地选择\拍照 的图片 并在界面上做一个预览功能 由于没有特别的相机\相册需求,则直接使用系统自带的UIImagePickerController ...

  6. css 为元素选择器,css目标状态伪类,结构化选择器,多媒体选择器,清除表默认样式、属性选择器

    伪元素选择器 :before 和 :after 添加的位置 :before --- 第一个子节点 :after --- 最后一个子节点 特点 1.默认是 inline 元素 2.必须包含 conten ...

  7. Java实现简单文件过滤器

    输入路径查找该路径下的指定文件类型的文件 代码思路: 想要循环遍历文件夹下所有子文件夹,就要用到递归. 首先判断路径是否存在: 是:获取文件 判断是否文件夹: 是:调用自身,继续获取子文件夹下内容 否 ...

  8. Stacked Regression的详细步骤和使用注意事项

    声明:这篇博文是我基于一篇网络文章翻译的,并结合了自己应用中的一些心得,如果有侵权,请联系本人删除. 最近做推荐的时候,开始接触到Stacking方法,在周志华老师的西瓜书中,Stacking方法是在 ...

  9. Mybatis-Generator生成Mapper文件中<if test="criteria.valid">的问题解答

    写在前面 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去 ...

  10. RobotFramework自动化测试框架的基础关键字(五)

    1.1.1        Run Keyword If判断的使用 Run Keyword If是一个常用的用来做逻辑判断的关键字,意思是如果满足了某一个判断条件,然后就会执行关键字,我们对list3中 ...