前言
源码地址:https://github.com/l2999019/DemoApp
可以Star一下,随意 - -
本系列,终于要终章了..感觉有点小失落
把我最终的成果模版开源出来吧地址如下:
https://github.com/l2999019/Xamarin.FormsDemo_CHN
效果如图:
基本算是涵盖了常见APP大部分的功能吧..
WebView,二维码扫描,开灯,地图,定位,终端设备的信息
正文
Xamarin在社区中其实有很多比较方便的组件,方便大家直接使用.
而且Xamarin团队将这些社区组件整理成了一个列表,方便我们查询.
列表的Github地址如下:
https://github.com/xamarin/XamarinComponents
今天我们主要是以设备信息组件为例子介绍一下如何使用社区组件
首先我们需要查询到自己需要使用的组件.
因为是英文,而且单词比较简单,所以我直接用谷歌翻译了,表格如下:
名称 | 描述 | 的NuGet | 文档和来源 | 创造者 |
---|---|---|---|---|
录音机 | 在设备的麦克风输入上录制音频。 | 的NuGet | GitHub上 | @NateRickard |
电池状态 | 收集电池电量,充电状态和类型。 | 的NuGet | GitHub上 | @JamesMontemagno |
扫码机 | 使用ZXing.NET.Mobile扫描和创建条形码。 | 的NuGet | GitHub上 | @Redth |
蓝牙LE | 扫描并连接到蓝牙设备。 | 的NuGet | GitHub上 | @ allanritchie911 |
日历 | 查询和修改设备日历 | 的NuGet | GitHub上 | 迦勒克拉克 |
罗盘 | 访问设备指南针标题。 | 的NuGet | GitHub上 | @cbartonnh&@JamesMontemagno |
配置 | 为每个将运行的环境定义应用程序的设置。 | 的NuGet | GitHub上 | @ abonilla93 |
连接 | 获取网络连接信息,如类型和连接是否可用。 | 的NuGet | GitHub上 | @JamesMontemagno |
加密 | PCL Crypto提供了一套一致的便携式加密API。 | 的NuGet | GitHub上 | @aarnott |
设备信息 | 有关设备的属性,如OS,Model和Id。 | 的NuGet | GitHub上 | @JamesMontemagno |
设备运动 | 提供对加速计,陀螺仪,磁力计和指南针的访问。 | 的NuGet | GitHub上 | @rdelrosario |
嵌入式资源 | 解压嵌入式资源跨平台。 | 的NuGet | GitHub上 | @JosephHill |
外部地图 | 从经纬度或地址启动外部地图。 | 的NuGet | GitHub上 | @JamesMontemagno |
文件存储/文件系统 | PCL存储提供跨平台的存储API。 | 的NuGet | GitHub上 | @dsplaisted |
文件选择器 | 选择并保存文件。 | 的NuGet | GitHub上 | @studyxnet |
文件上传 | 使用多部分请求上传文件。 | 的NuGet | GitHub上 | @rdelrosario |
指纹 | 在iOS,Android和Windows上访问指纹传感器。 | 的NuGet | GitHub上 | @smstuebe |
FFImageLoading | 图像加载与缓存,占位符,转换和更多 | 的NuGet | GitHub上 | @ molinch,@ daniel-luberda |
地理围栏 | 当用户进入/退出时监控区域。 | 的NuGet | GitHub上 | @ allanritchie911 |
Geolocator | 轻松检测设备的GPS位置。 | 的NuGet | GitHub上 | @JamesMontemagno |
HTTP传输 | 在后台下载或上传文件。提供速度指标和估计 | 的NuGet | GitHub上 | @ allanritchie911 |
iBeacon&Estimote | 范围和监视蓝牙信标。 | 的NuGet | GitHub上 | @ allanritchie911 |
应用内结算 | 制作,查询并获取应用内购买和订阅。 | 的NuGet | GitHub上 | @JamesMontemagno |
灯 | 访问LED | 的NuGet | GitHub上 | @kphillpotts |
本地通知 | 显示本地通知 | 的NuGet | GitHub上 | @EdSnider,@JamesMontemagno |
本地通知 | 管理本地通知 | 的NuGet | GitHub上 | @ allanritchie911 |
管理睡眠 | 管理自动睡眠/自动锁定。 | 的NuGet | GitHub上 | @ molinch0 |
媒体 | 拍照或录像。 | 的NuGet | GitHub上 | @JamesMontemagno |
媒体经理 | 播放音频。 | 的NuGet | GitHub上 | @mhvdijk |
消息 | 拨打电话,发送短信,并发送电子邮件 | 的NuGet | GitHub上 | @cjlotz |
微软乐队 | 从共享代码连接并与Microsoft Band进行通信! | 的NuGet | GitHub上 | @mattleibow |
Mono.Data.Sqlite | 将Mono.Data.Sqlite添加到任何Xamarin或Windows .NET应用程序。 | 的NuGet | GitHub上 | @mattleibow |
权限 | 轻松检查并请求运行时权限。 | 的NuGet | GitHub上 | @JamesMontemagno |
持久的键值存储 | Akavache是一个异步持久(即写入磁盘)键值存储。 | 的NuGet | GitHub上 | @paulcbetts |
便携式剃刀 | 用于移动的ASP.NET MVC API的轻量级实现。 | 的NuGet | GitHub上 | @JosephHill |
推送通知 | 跨平台iOS和Android推送通知。 | 的NuGet | GitHub上 | @rdelrosario |
安全存储 | 为关键值对数据提供安全存储 | 的NuGet | GitHub上 | @sameerIOTApps |
设置 | 简单和一致的跨平台设置API。 | 的NuGet | GitHub上 | @JamesMontemagno |
分享 | 轻松共享文本,链接或打开浏览器。 | 的NuGet | GitHub上 | @JamesMontemagno&@JakobGürtl |
传感器 | 设备传感器 - 加速度计,环境光,气压计,指南针,设备方位,陀螺仪,磁力计,计步器和接近 | 的NuGet | GitHub上 | @ allanritchie911 |
套接字 | TCP和UDP侦听器和客户端+ UDP多播。 | 的NuGet | GitHub上 | @rdavis_au |
语音识别 | 语音到文本。 | 的NuGet | GitHub上 | @ allanritchie911 |
简单的音频播放器 | 从共享库播放多个MP3或波形文件。 | 的NuGet | GitHub上 | @adrianstevens |
文字转语音 | 从共享代码中回复文本。 | 的NuGet | GitHub上 | @JamesMontemagno |
烤面包 | 显示吐司/弹出式通知的简单方法。 | 的NuGet | GitHub上 | @AdamPed&@EgorBo |
用户对话框 | 消息框样式对话框。 | 的NuGet | GitHub上 | @ allanritchie911 |
版本跟踪 | 跟踪用户以前安装的应用程序的版本。 | 的NuGet | GitHub上 | @ColbyLWilliams |
颤动 | 振动任何设备。 | 的NuGet | GitHub上 | @JamesMontemagno |
设备方向 | 插件用于屏幕方向(更改和锁定) | 的NuGet | GitHub上 | @YauheniPakala |
我们今天要使用设备信息的组件.,所以直接找到设备信息,然后进入nuget界面,引用.
注意,这里要强调的一点是,当你使用这些组件的时候,一定需要PCL项目加上客户端项目,都要引用
也就是如图:
红框中的三个项目,都需要引用同样的nuget库.因为PCL中是接口,各个平台客户端才是具体实现.
需要仔细看文档说明,有些插件是需要初始化的,所以需要你在客户端项目中初始化,比如二维码插件( ZXing.Net.Mobile)
剩下的代码就很简单了,我们先创建一个Page,并添加listView控件如下:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Xamarin.FormsDemo_CHN.Views.SheBeiInfoPage"
Title="设备信息"
>
<ContentPage.Content>
<StackLayout>
<ListView x:Name="ItemsListView" >
<ListView.ItemTemplate >
<DataTemplate >
<TextCell Text="{Binding TextName}" Detail="{Binding Name}" DetailColor="#7EC0EE" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Label Text="Welcome to Xamarin.Forms!"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
然后直接F7,进入后台代码,编写代码如下:
public partial class SheBeiInfoPage : ContentPage
{
List<dynamic> date = new List<dynamic>();
public SheBeiInfoPage()
{
InitializeComponent();
AddPhoneInfo();
ItemsListView.ItemsSource = date;
}
public void AddPhoneInfo()
{
string model = CrossDeviceInfo.Current.Model;
string Version = CrossDeviceInfo.Current.Version;
string VersionNumber = CrossDeviceInfo.Current.VersionNumber.ToString();
string Platform = CrossDeviceInfo.Current.Platform.ToString();
date.Add(new { TextName = model, Name = "设备名称" });
date.Add(new { TextName = Version, Name = "设备版本" });
date.Add(new { TextName = VersionNumber, Name = "设备版本号" });
date.Add(new { TextName = Platform, Name = "设备平台" });
}
}
因为封装的已经很完善了,直接通过静态类CrossDeviceInfo,就可以获取相关的设备信息.
tip:最新的版本新增了判断是否为模拟器的功能,但是nuget好像没加入,需要使用的话可以从github自行编译.
关于绑定Jar类库
本来打算这篇文章讲绑定类库,但是看了一下,网上已经很多这类的文章了,本来操作也比较简单...我就不过多的哗众取宠了.
唯一要解释的一点,
就是关于绑定了类库之后,会类名,变量名报错的问题.
很多文章都是一笔带过..让大家修改Metadate.xml更改绑定规则就完事了..
不过我觉得 授人以鱼不如授人以渔.
出现这个错误的主要原因是:
GAPI这个工具,会将java代码自动化解析成C#代码,但是,完美的解析,是不可能的.
所以会出现少量的错误信息,需要我们配置这个xml文件来特殊配置这些错误的节点.
我们应该用的最多的就是attr这个节点,如下:
<attr path="/api/namespace/object[@cname='GtkWindow']/signal[@name='ActivateDefault']" name="name">DefaultActivated</attr>
我们可以使用它来更改任何现有属性的值,或将新属性插入API文件中的任何元素。
<attr>元素有两个属性path和name,使用path来标识要更改的元素,并使用name来标识元素上的属性名称。
当然,各位如果想更深入的了解这个可以把java变成C#的神奇神器..可以到如下地址查看
http://www.mono-project.com/docs/gui/gtksharp/gapi/
写在最后
结束了..Xamarin说难,其实也不难,说简单,其实你需要了解的东西还是挺多的.
希望开源出来的项目模版能帮到大家..
最后,真诚的感谢大家对本系列的支持.