仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1487|回复: 16
打印 上一主题 下一主题

[学习教程] IOS编程:Android结构优化仓酷云

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:27:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
多线程问题还有胶水代码的问题建立一个基于CoreData的工程你会看到他自动创建3个类的对象NSManagedObjectModel管理数据的存储结构文件扩展名是xcdatamodeldNSPersistentStoreCoordinator用来管理底层数据的存储用官方的话说CoreDataisnotarelationaldatabaseorarelationaldatabasemanagementsystem(RDBMS)categories:Android

在Android开辟中,我们经常使用的结构体例次要有LinearLayout、RelativeLayout、FrameLayout等,经由过程这些结构我们能够完成林林总总的界面。与此同时,怎样准确、高效的利用这些结构体例来构造UI控件,是我们构建优异AndroidApp的次要条件之一。本篇内容就次要环绕Android结构优化来会商在一样平常开辟中我们利用经常使用结构必要注重的一些方面,同时先容一款SDK自带的UI功能检测工具HierarchyViewer。
结构准绳

经由过程一些习用、无效的结构准绳,我们能够制造出加载效力高而且复用性高的UI。复杂来讲,在AndroidUI结构过程当中,必要恪守的准绳包含以下几点:


  • 只管多利用RelativeLayout,不要利用相对结构AbsoluteLayout;
  • 将可复用的组件抽掏出来并经由过程<include/>标签利用;
  • 利用<ViewStub/>标签来加载一些不经常使用的结构;
  • 利用<merge/>标签削减结构的嵌套条理;
因为Android的碎片化水平很高,市情上存在的屏幕尺寸也是形形色色,利用RelativeLayout能使我们构建的结构顺应性更强,构建出来的UI结构对多屏幕的适配效果越好,经由过程指定UI控件间的绝对地位,使在分歧屏幕上结构的体现能基础坚持分歧。固然,也不是一切情形下都得利用绝对结构,依据详细情形来选择和其他结构体例的搭配来完成最优结构。
1、<include/>的利用

在实践开辟中,我们常常会碰到一些共用的UI组件,好比带前往按钮的导航栏,假如为每个xml文件都设置这部散布局,一是反复的事情量年夜,二是假如有变动,那末每个xml文件都得修正。还好,Android为我们供应了<include/>标签,望文生义,经由过程它,我们能够将这些共用的组件抽掏出来独自放到一个xml文件中,然后利用<include/>标签导进共用结构,如许,后面提到的两个成绩都办理了。比方下面提到的例子,新建一个xml结构文件作为顶部导航的共用结构。
  1. xmlcommon_navitationbar.xml<RelativeLayoutmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/white"android:padding="10dip"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:text="Back"android:textColor="@android:color/black"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="Title"android:textColor="@android:color/black"/></RelativeLayout>
复制代码
然后我们在必要引进导航栏的结构xml中经由过程<include/>导进这个共用结构。
  1. xmlmain.xml<RelativeLayoutmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><includeandroid:layout_alignParentTop="true"layout="@layout/common_navitationbar"/></RelativeLayout>
复制代码
经由过程这类体例,我们既能进步UI的制造和复用效力,也能包管制造的UI结构加倍规整和易保护。结构完成后我们运转一下,能够看到以下结构效果,这就是我们方才完成的带导航栏的界面。

<br>
接着我们进进sdk目次下的tools文件夹下,找到HierarchyViewer并运转(此时坚持你的摹拟器或真机正在运转必要举行剖析的App),双击我们正在显现的这个App所代表的历程。

<br>
接上去便会进进hierarchyviewer的界面,我们能够在这里很明晰看到正在运转的UI的结构条理布局和它们之间的干系。

<br>
剖析方才我们构建的导航栏结构,缩小结构剖析图能够看到,被include出去的common_navitationbar.xml根节点是一个RelativeLayout,而包括它的主界面main.xml根节点也是一个RelativeLayout,它后面另有一个FrameLayout等几个节点,FrameLayout就是Activity结构中默许的父结构节点,再往上是一个LinearLayout,这个LinearLayout就是包括Activity结构和形态栏的全部屏幕显现的结构父节点,这个LinearLayout另有一个子节点就是ViewStub,关于这个节点我们在前面会具体先容。

<br>
2、<merge/>的利用

<merge/>标签的感化是兼并UI结构,利用该标签能下降UI结构的嵌套条理。该标签的次要利用场景次要包含两个,第一是当xml文件的根结构是FrameLayout时,能够用merge作为根节点。来由是由于Activity的内容结构中,默许就用了一个FrameLayout作为xml结构根节点的父节点,这一点能够从上图中看到,main.xml的根节点是一个RelativeLayout,其父节点就是一个FrameLayout,假如我们在main.xml内里利用FrameLayout作为根节点的话,这时候就能够利用merge来兼并成一个FrameLayout,如许就下降了结构嵌套条理。
我们修正一下main.xml的内容,将根节点修正为merge标签。
  1. xmlmain.xml<mergexmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:background="@android:color/darker_gray"android:layout_height="match_parent"><includelayout="@layout/common_navitationbar"/></merge>
复制代码
从头运转并翻开HierarchyViewer检察此时的结构条理布局,发明之前多出来的一个RelativeLayout就没有了,间接将common_navigationbar.xml内里的内容兼并到了main.xml内里。

<br>
利用<merge/>的第二种情形是当用include标签导进一个共用结构时,假如父结构和子结构根节点为统一范例,可使用merge将子节点结构的内容兼并包括到父结构中,如许就能够削减一级嵌套条理。起首我们看看不利用merge的情形。我们新建一个结构文件commonnaviright.xml用来构建一个在导航栏右侧的按钮结构。
  1. xmlcommon_navi_right.xml<RelativeLayoutmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="wrap_content"android:layout_height="wrap_content"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="Ok"android:textColor="@android:color/black"/></RelativeLayout>
复制代码
然后修正common_navitationbar.xml的内容,增加一个include,将右边按钮的结构导进:
  1. xmlcommon_navitationbar.xml<RelativeLayoutmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/white"android:padding="10dip"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:text="Back"android:textColor="@android:color/black"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="Title"android:textColor="@android:color/black"/><includelayout="@layout/common_navi_right"/></RelativeLayout>
复制代码
运转后的效果以下图,在导航栏右边增加了一个按钮“ok”

<br>
然后再运转HierarchyViewer看看如今的结构布局,发明commonnaviright.xml作为一个结构子节点嵌套在了common_navitationbar.xml上面。

<br>
这时候我们再将commonnaviright.xml的根节点范例改成merge。
  1. xmlcommon_navi_right.xml<mergexmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="wrap_content"android:layout_height="wrap_content"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="Ok"android:textColor="@android:color/black"/></merge>
复制代码
从头运转并翻开HierarchyViewer检察结构布局,发明之前嵌套的一个RelativeLayout就没有了,这就是利用merge的效果,能下降结构的嵌套条理。

<br>
3、<ViewStub/>的利用

大概有很多同砚对ViewStub还对照生疏,起首来看看ViewStub在官方文档里是怎样先容的:
AViewStubisaninvisible,zero-sizedViewthatcanbeusedtolazilyinflatelayoutresourcesatruntime.WhenaViewStubismadevisible,orwheninflate()isinvoked,thelayoutresourceisinflated.TheViewStubthenreplacesitselfinitsparentwiththeinflatedVieworViews.Therefore,theViewStubexistsintheviewhierarchyuntilsetVisibility(int)orinflate()isinvoked.TheinflatedViewisaddedtotheViewStubsparentwiththeViewStubslayoutparameters.
大抵意义是:ViewStub是一个不成见的,能在运转时代提早加载的巨细为0的View,它间接承继于View。当对一个ViewStub挪用inflate()办法或设置它可见时,体系会加载在ViewStub标签中引进的我们本人界说的View,然后添补在父结构傍边。也就是说,在对ViewStub挪用inflate()办法或设置visible之前,它是不占用结构空间和体系资本的。它的利用场景能够是在我们必要加载并显现一些不经常使用的View时,比方一些收集非常的提醒信息等。
我们新建一个xml文件用来显现一个提醒信息:
  1. xmlcommon_msg.xml<RelativeLayoutmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:background="@android:color/white"android:padding="10dip"android:text="Message"android:textColor="@android:color/black"/></RelativeLayout>
复制代码
然后在main.xml内里到场ViewStub的标签引进下面的结构:
  1. xmlmain.xml<mergexmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:background="@android:color/darker_gray"android:layout_height="match_parent"><includelayout="@layout/common_navitationbar"/><ViewStubandroid:id="@+id/msg_layout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout="@layout/common_msg"/></merge>
复制代码
修正MainActivity.java的代码,我们这里设置为点击右上角按钮的时分显现自界说的common_msg.xml的内容。

视图是仪表盘模型是发动机控制器是控制芯片CoreData---管理数据OBJC刚学的时候觉得CD很高深其实他是最容易用的库之一
因胸联盟 该用户已被删除
沙发
发表于 2015-1-21 07:17:44 | 只看该作者
这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。
老尸 该用户已被删除
板凳
发表于 2015-1-23 12:24:03 | 只看该作者
其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。
变相怪杰 该用户已被删除
地板
发表于 2015-1-24 14:37:03 | 只看该作者
这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。
5#
发表于 2015-2-1 10:02:45 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
若相依 该用户已被删除
6#
发表于 2015-2-7 02:11:42 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
山那边是海 该用户已被删除
7#
发表于 2015-2-7 02:36:32 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
若天明 该用户已被删除
8#
发表于 2015-2-19 21:17:38 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
飘灵儿 该用户已被删除
9#
发表于 2015-2-20 01:44:18 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
深爱那片海 该用户已被删除
10#
发表于 2015-2-21 19:17:40 | 只看该作者
这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。
乐观 该用户已被删除
11#
发表于 2015-2-25 19:27:00 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
分手快乐 该用户已被删除
12#
发表于 2015-2-26 21:23:38 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
海妖 该用户已被删除
13#
发表于 2015-3-1 19:15:45 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
冷月葬花魂 该用户已被删除
14#
发表于 2015-3-10 22:16:35 | 只看该作者
培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
admin 该用户已被删除
15#
发表于 2015-3-11 17:21:20 | 只看该作者
然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,
蒙在股里 该用户已被删除
16#
发表于 2015-3-19 03:19:05 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
谁可相欹 该用户已被删除
17#
发表于 2015-3-27 03:10:27 | 只看该作者
开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表