1 Star 0 Fork 1

徐旺琥 / CnBlogsClientMini

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

Xamarin Android 开源博客园客户端

By 在下徐大安 948036947@qq.com

​ 本文主要介绍了一个我在入门Xamarin时做的一个开源小项目,链接地址:https://gitee.com/xu-wanghu/cnblogsclientmini。该项目基于另一个开源Xamarin项目,链接地址:https://github.com/JoesWeek/XamCnblogs。在JoesWeek/XamCnblogs项目的基础上,我精简了很多功能,并把我的这个小项目称为博客园Mini,功能包括了自己比较感兴趣的新闻浏览与知识库文章浏览。 本文目标受众是Xamarin小白或其他对手机端的跨平台应用开发技术有兴趣的人员。

​ 在21年初时,我接触了微软的Xamarin(读作['zæmərɪn]),一时被它的Xaml界面设计与支持.NET吸引。由于之前接触过WPF,所以入门Xamarin的学习曲线十分平滑,大赞微软。WPF与Xamarin十分相似,很多特性都通用,比如.NET,Xaml,C#,Mvvm等等,当然Xamarin也有一些独有的特性,比如其支持Android、IOS,所以特定平台也给它带来了区别于windows下的WPF的特性,比如手机端的导航、Shell、Effect与Render,以及一个简单的IOC容器DependencyService等等。

​ 另外,如果你想要在windows平台下从事Xamarin开发,并且准备使用虚拟设备,那么一定要使用Intel处理器的机器,原因如下图:

intel
实现效果介绍

​ 先介绍完成效果,使用的是物理测试机,型号是Honor 8。桌面图标如下图:

desktop

​ 点击图标,会展示一个欢迎页,然后进入主界面。主界面是一个拥有两页子页的母Tab页,Tab栏位于界面底部,两个Tab子页的主题分别是新闻与知识库。新闻子页中使用了另一个Tab栏位于顶部的Tab母页,该母页拥有三个Tab子页,分别展示最新新闻、推荐新闻与本周热门新闻。知识库子页中,展示了被收录在知识库中的文章。

latestNews kbarticles

​ 新闻子页与知识库子页都实现了顶部下拉刷新与分页显示,每一页是20条内容,当下拉到列表最下方时,自动获取下一页并填充。点击新闻列表中的一项可以进入这一项的详情浏览界面。

newsDetail
关键技术点介绍

​ 整体采用Xamarin.Forms,它是一个开放源代码 UI 框架。 通过 Xamarin.Forms,开发人员可从单个共享基本代码生成 Xamarin.Android、Xamarin.iOS 和 Windows 应用程序。当前项目采用VS2019社区版作为IDE,创建项目时选择移动应用项目。

project

​ 博客园Mini由三个模块构成, 封装了博客园Api调用的CnBlogsCore, 包含了大多数界面与界面逻辑的CnBlogsClient, 包含安卓端的主程序与一些安卓特性实现的CnBlogsClient.Android. 各模块之间的依赖方向如图.

depen

​ 该项目的所有数据都来自博客园开发者中心(https://api.cnblogs.com/), 该web服务采用OAuth 2.0授权机制. 在调用博客园的api之前,需要申请自己的ClientId与ClientSecret. 博客园将资源分为了大概两类,第一类使用开发者的ClientId与ClientSecret即可访问, 另一类则需要博客园账号授权第三方应用才能访问了. 第一类资源采用OAuth 2.0的 Client Credential授权方式, 第二类资源采用 authorization-code授权方式. 博客园Mini的关注点是Xamarin入门, 所以应用内只设计了第一类资源,即新闻与知识库. 博客园开放的api与 clientid等, 都放在CnBlogsCore的Global.CnBlogsUrl.cs.

​ 新闻详情页与知识库详情页采用WebView展示内容, 博客园Server提供的详情Body是个格式化过的网页内容. 网页的模板页作为资源的形式放在CnBlogsClient.Android的Assets内, 当前新闻与知识库的模板页都使用kbarticles.html, 在安卓客户端收到Body后, 直接将Body更新到Vue对象中.

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

使用Xamarin实现的博客园安卓客户端,详见md文件介绍。md文件同级目录下放上imgs文件夹,可以在文件内浏览图片。 展开 收起
C#
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C#
1
https://gitee.com/xu-wanghu/cnblogsclientmini.git
git@gitee.com:xu-wanghu/cnblogsclientmini.git
xu-wanghu
cnblogsclientmini
CnBlogsClientMini
master

搜索帮助