Android ICS(SDK4.0)新特性

本文详细介绍了Android 4.0新增的GridLayout布局特性,对比了TableLayout和GridView,并探讨了它们的应用场景和局限性。GridLayout能实现控件在行和列上的灵活布局,支持跨行跨列,适用于复杂的UI设计。
摘要由CSDN通过智能技术生成

GridView/ TableLayout/ GridLayout 的一些比较。

> Android 4.0 新特性

1)android 4.0版本新特性GridLayout。
2)Android 自4.2以来就开始支持多用户功能。
3)Dalvik与ART:Dalvik是4.4 以前的,ART是Android 4.4 的时候发布的,因为Dalvik是应用运行的时候进行编译,而ART是全部编译完了再运行,效率要高很多。
4)打造沉浸式模式的用户体验,就是要将这些系统元素全部隐藏,只留下主体内容部分。隐藏状态栏和ActionBar的方式在4.1系统之上和4.1系统之下还是不一样的.只有在Android 4.4及以上系统才支持沉浸式模式.沉浸式原理就是使整个布局延伸到状态栏和导航栏。 
5)4.0 以下,应该是默认不支持webp了;对于4.0+ 到 4.2.1 ,只支持完全不透明的decode、encode的webp图;4.2.1+ 对于webp的decode、encode是完全支持的(包含半透明的webp图)

6)从SDK 4.0开始所有的网络请求都需要在子线程中;广播请求网络同理,开启子线程在子线程中请求网络。

> API 14(Android 4.0)以后的 ActivityLifecycleCallbacks
  API 14之后,在Application类中,提供了一个应用生命周期回调的注册方法,用来对应用的生命周期进行集中管理,这个接口叫registerActivityLifecycleCallbacks,可以通过它注册自己的ActivityLifeCycleCallback,每一个Activity的生命周期都会回调到这里的对应方法。之前我们想做类似限制制定Activity个数的时候都要自己去添加和计数,有了ActivityLifeCycleCallback接口,所有Activity的生命周期都会在这里回调,我们可以根据条件随心处理。
神奇的ActivityLifecycleCallbacks,解决Activity管理的后顾之忧- https://blog.csdn.net/xiaoyantan/article/details/70337980
ActivityLifecycleCallbacks- https://github.com/Dawish/CustomViews/tree/master/Channel2App/src/main/java/com/anno

 -- 在微信中,对于4.0以上的机型也是采用通过注册ActivityLifecycleCallbacks接口,对于4.0以下的机型我们会尝试反射ActivityThread中的mInstrumentation对象。

在Android  4.2系统之后,Google在Android中引入了RTL布局,更好的支持了从右往左文字布局的显示。为了更好的兼容RTL布局,google推荐使用MarginStart和MarginEnd来替代MarginLeft和MarginRight,这样应用可以在正常的屏幕和从右往左显示文字的屏幕上都保持一致的用户体验。

> GridLayout与GridView
浅谈android4.0开发之GridLayout布局:http://blog.csdn.net/pku_android/article/details/7343258
-- Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:LinearLayout (线性布局),FrameLayout(框架布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。

 在android4.0版本之前,如果想要达到网格布局的效果,首先可以考虑使用最常见的LinearLayout布局,但是这样的排布会产生如下几点问题:
1、不能同时在X,Y轴方向上进行控件的对齐。
2、当多层布局嵌套时会有性能问题。
3、不能稳定地支持一些支持自由编辑布局的工具。
 
 其次考虑使用表格布局TabelLayout,这种方式会把包含的元素以行和列的形式进行排列,每行为一个TableRow对象,也可以是一个View对象,而在TableRow中还可以继续添加其他的控件,每添加一个子控件就成为一列。但是使用这种布局可能会出现不能将控件占据多个行或列的问题,而且渲染速度也不能得到很好的保证。
 android4.0以上版本出现的GridLayout布局解决了以上问题。GridLayout布局使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列。而GridLayout使用的其实是跟LinearLayout类似的API,只不过是修改了一下相关的标签而已,所以对于开发者来说,掌握GridLayout还是很容易的事情。

-- GridLayout的布局策略简单分为以下三个部分:(有点类似GridView)
  首先它与LinearLayout布局一样,也分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列,但是通过指定android:columnCount设置列数的属性后,控件会自动换行进行排列。另一方面,对于GridLayout布局中的子控件,默认按照wrap_content的方式设置其显示,这只需要在GridLayout布局中显式声明即可。
  其次,若要指定某控件显示在固定的行或列,只需设置该子控件的android:layout_row和android:layout_column属性即可,但是需要注意:android:layout_row=”0”表示从第一行开始,android:layout_column=”0”表示从第一列开始,这与编程语言中一维数组的赋值情况类似。
  最后,如果需要设置某控件跨越多行或多列,只需将该子控件的android:layout_rowSpan或者layout_columnSpan属性设置为数值,再设置其layout_gravity属性为fill即可,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。
利用GridLayout布局编写的简易计算器代码如下(注意:仅限于android4.0及以上的版本)

-- GridLayout与GridView的比较:
 GridLayout初步研究:可以这么说这个布局绝对是开发者的福音,它大大简化了对复杂布局的处理,包括性能提高不是一倍两倍。它与GridView是完全不同的概念,

GridView是一种适配器布局,它的继承关系是:ViewGroup > AdapterView > AbsListView > GridView,

GridLayout的继承关系是:ViewGroup >  GridLayout;
  GridLayout是GridView的爷爷辈的,但不是亲生爷爷哦,GridView的亲生爷爷是AdapterView,而GridLayout是AdapterView的兄弟。GridView的爷爷是适配器视图,当然爷爷的兄弟GridLayout就不应该是适配器视图了。那么什么时候用孙子GridView什么时候用爷爷GridLayout呢?类似九宫格这种可以采用GridView。但是像Android系统自带的计算器的界面就不可能通过GridView实现,因为GridView所设置的每个Item都是一样的,无法实现类似计算器GridLayout item大小不同功能,如果使用GridLayout实现那就简单多了。

> GridLayout与TableLayout布局:
 -- GridLayout 布局在 Level14才被支持,之前版本要使用的话,要按以下步骤设置:
   1. import -> Existing Android Code Into Workspace  
   2. 选择目录: 在sdk下的GridLayout目录   sdk\extras\android\support\v7\gridlayout 
   3. 勾选"Copy projects into workspace" 

  TableLayout 的一些不足: 至于有了TableLayout又搞个GridLayout的原因,TableLayout至少有下面两个原因:
  1.不能同时向水平和垂直方向做控件的对齐 ,TableLayout继承了LinearLayout,因此只能向一个方向做控件的对齐。 
  2.不能跨行跨列 ,因为TableLayout,不明确指定包含多少行,多少列,而是通过向TableRow里面添加其他组件,每添加一个组件该表格就增加一列。 
  如果向TableLayout里面添加组件,那么该组件就直接占用一行。所以这种方式造成控件不能跨行跨列。 而GridLayout,则用columnCount设置列数后,增加的控件在超过列数后自动换行进行排列。 

-- 简单汇总下TableLayout的特点: 
Shrinkable : 该列的宽度可以进行收缩,以使表格能够适应父容器的大小 
Stretchable : 该列可以进行拉伸,以填满表格中空闲的空间 
Collapsed : 该列将会被隐藏
 
-- GridLayout的特点: 
android:layout_row :  固定显示在第几行。 
android:layout_column :  固定显示在第几列,前面几列没控件的话就空着。 
android:layout_rowSpan : 跨几行 
android:layout_columnSpan:  跨几列  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值