Technical

背景

这篇博客会介绍如何自定义用Xamarin开发的Android以及iOS的navigation bar的返回的图标和文字。

之所以会需要以博客的形式记录这个知识点是由于本身如果Xamarin.Forms来做一个最基本的控件的custom renderer,思路会是这样的:首先要了解我们要自定义的控件是Xamarin.Forms中的哪个控件,然后在.NET Standard的项目中定义一个类去继承自Xamarin.Forms下的这个控件的类。之后就是在Xamarin的platform specific的项目中,各自定义两个新的renderer的类,加上一定的属性来表明这两个renderer是用在这个我们新定义的控件上的,然后重写这个renderer的OnElementChanged方法,这个方法会在改元素被生成的时候调用。最后,在XAML的页面中使用新的自定义的控件就可以达到效果。

具体的官方教程在这里:Xamarin.Forms Custom Renderers

阅读更多

背景

我最近做了一个case,是将一个安卓的aar的包绑定到Xamarin.Android的项目中去,这个aar的包是一个UI控件,既可以是DatePicker,也可以是TimerPicker。
我帮助客户生成了binding的dll并且成功绑定到安卓的项目中去。但是,当我在要使用这个类库的时候,遇到了一个代码实现上的问题。

阅读更多

我在写上一篇博客:Xamarin.Android vs. Native Android - How you implement Java Listener in C#的时候有一些错误。那篇博客的内容是关于如果你在参考一个原生态安卓的项目,并且想把它转换为Xamarin.Android项目,有一些语言特性的转换需要了解。我主要是从事件处理的角度写的那篇博客。

那篇博客我还会继续留着,因为它的做法并没有问题,只不过不是最佳实践。大家可以对比阅读这篇来看一下更好的一个solution。

背景

最近我正在学习Xamarin官方文档生成的pdf文件,关于如何开发Xamarin.Android应用的。我读到了Downloadable Fonts这个topic,使用这个方案要比将字体打包进apk文件有更多的好处。

如果你想了解什么是安卓的Downloadable Fonts,你可以查看这个文档:Downloadable Fonts

在上面的链接中,你会看到Google有一个官方的sample来阐述这个功能的使用方式。

链接:android-DownloadableFonts

由于我在学习Xamarin.Android,所以我想直接去用Xamarin.Android实现一个一模一样的sample,作为一个练习。因为平时用Xamarin.Forms会更多,Xamarin.Android会用得相对比较少。

之后噩梦就发生了,我发现如果去参照Google的sample想直接翻译成Xamarin.Android基于C#的代码,还是非常困难的,尽管这两个语言的相似度非常高。

解救了我的是我找到了Xamarin官方出的一个Xamarin.Android的sample,做的事情和我想做的一模一样。

链接:Xamarin.Android DownloadableFonts Sample

我查看了它的代码,发现实现得非常完美。所以,你在这篇博客中会看到的是,我会用这两个项目中的一些实例来展示Java和C#的一些不同的特性,也是基于这些特性的不同,我们在开发Xamarin.Android的时候才需要做一些思路的转换。

阅读更多

对于使用Xamarin来开发安卓应用的工程师来说,了解如何将Java代码转换为C#代码是一个非常重要的事情。

最近我正在使用纯的Xamarin.Android项目来实现一些东西,但是我遇到了非常多的问题。

当你想要解决这些问题的时候,通常你在网上找到的都是原生态安卓的一些文档资料以及一些sample的项目。为了解决问题,我就找了一个来自谷歌官方的一个sample程序,是用Java写的。

所以我必须要学会如何转换Java code到C#,否则开发Xamarin.Android的程序会变得非常困难。

阅读更多

背景

在最近几年中,越来越多的企业会将自己的网站转换成手机端的应用。这里所谓的转换,其实不是摒弃一个使用另一个,而是共存。所以就会有一个比较普遍的需求就是,很多的企业或者开发者希望使用同一套Web API来同时支持自己的网站和手机应用去操作自己的数据库,并且这个数据库的结构也是一样的。

这篇博客就是在阐述一个一模一样的情况。我的一个客户已经基于.NET Core 2.0的版本开发了一套Web API,并且网站已经在运行中。但是他想要用Xamarin.Forms来开发一个手机应用,并且是想用到Azure Mobile Apps SDK来使用离线同步(Offline Sync)功能。

当然,他希望使用同一套Web API和同一个数据库数据结构。

什么是离线同步?

如果是中文,就真的非常好理解。在使用手机的过程中,我们无法保证手机的网络信号永远是畅通的。再假设你现在在乘飞机,手机开启了飞行模式。这时候你需要在你的app中添加一些记录,比如是todoList,你当然希望一旦关闭飞行模式恢复网络之后,这些数据会被同步到数据库。这就是离线同步的意义。

看下面的微软官方解释:

Offline sync allows users to interact with a mobile application, viewing, adding, or modifying data, even where there isn’t a network connection. Changes are stored in a local database, and once the device is online, the changes can be synced with the Azure Mobile Apps instance. This article explains how to add offline sync functionality to a Xamarin.Forms application.

阅读更多

背景

我的客户希望能够在Xamarin.Forms的Secondary Toolbar中达到如下效果:

Expected Effect

一开始的时候我认为这可能是Xamarin本身的一个限制,因为我一直认为安卓原生态的应用一定是可以直接实现的。

但是当我深入研究之后,我发现之所以Xamarin.Forms不支持这样做其实是因为安卓原生态也并不支持。

阅读更多

背景

一个客户想要在WPF中查找所有安装的Windows Store App,但是如果是编程来写,只能用UWP的类库,不支持WPF。
经过研究发现,使用PowerShell的脚本Get-AppxPackage -AllUsers可以获得所有的用户账号下安装过的Store App。

相关链接:Get-AppxPackage

所以本文的宗旨就是使用.NET的类库来调用PowerShell的脚本。

阅读更多

背景

这篇文档是基于之前那篇WebView版本的。当时在那篇文档中也说过,WebView版本的特点是,简单易用,把Bot的Url嵌入到WebView的Source对象中。但是这个方法的弊端就是,Xamarin的可控性太小,所有的都依赖于网页版的Bot的开发,并且WebView的性能终究不会比得上Xamarin通过自己发送请求。

那么这篇文档介绍的会是另外一种方式,也是比较推荐的,就是使用DirectLine API来直接通过Xamarin与Bot通信。

阅读更多

背景

现在微软主推的就是Azure平台的产品,这篇文档的内容就是如何将Azure的Bot framework使用到Xamarin中。写这篇文档的原因也很简单,我support Xamarin,并且想学习Bot,之后会陆陆续续再有许多文章结合各种技术,比如如何在Xamarin中使用Azure Cognitive Service,等等。

用到的技术

  • Xamarin (WebView)
  • Bot Framework (Web Chat)

说明

阅读这篇文档首先要有一定的关于Xamarin和Bot framework的基本认识。本文是记录如何使用Xamarin的Web View来host一个bot service,所以这个bot的channel是web chat,顾名思义,web chat的bot是基于一个url来访问的,这也是为什么需要用Web View来作为容器的原因。

之后还会有一篇文档,是关于如何使用Direct Line API来与bot通信,该文档中的bot的channel就必须是Direct Line了。

阅读更多

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×