可能最近事情比较琐碎的原因,对Android UI的理解一直不甚透彻,特别是Acitivity、Fragment等类之间的关系。反复看了看《Android 4 高级编程》——之所以用“看”而不是“研读”,是因为发现自己总是在一知半解中着急的浏览,而没有深入研究——终于有了一丁丁点体会,突然觉得前些时日的理解也许有错误或不当之处。
也许学习就是在不断纠正错误中取得收获的——我是这样安慰自己的。
Application类创建实例后,一般来讲就要创建Activity类(或继承类)。Activity创建后就好比我们在手机屏幕上挂上了“白板”。
记得老师上学的时候,都会把黑板分成左右两部分来书写。“白板”也是如此,不过需要通过布局来实现。在前面的Hello World应用中,我们更多的是利用了资源类:
在FullscreenActivity类的定义中,OnCreate()事件中将activity_fullscreen布局加入到Activity:setContentView(R.layout.activity_fullscreen);
还有些时候,老师觉得黑板分成左右两部分还不够,于是,在其中一半又画了一道竖线,将黑板分为了3部分。这其实就是布局嵌套布局的问题。不管如何,手机屏的大小就像黑板的大小一般都是固定的,所以,布局不宜嵌套太多,否则即便不考虑Android处理效率的问题,也应该考虑美观的问题。
Android定义了一些常用的布局类,如FrameLayout、LinearLayout、RelativeLayout和GridLayout。FrameLayout就像把其中的元素叠罗汉。LinearLayout中的元素属于挨个排(或横或纵)。RelativeLayout中元素环环相扣。GridLayout布局怎么看怎么像HTML中的<TABLE>。需要注意的是GridLayout是Android 3.0(API Level 11)之后才引入的布局。所以,创建布局的时候,要根据准备发布应用的最小应用平台决定是否应用GridLayout。《Android 4 高级编程》建议,可能的情况下应该优先使用GridLayout,而不是用嵌套来实现。
简单总结一下:
1、Application的OnCreate()中创建Activity,Activity的OnCreate()中创建自定义的布局;
2、由于我们的Helloworld应用没有动画,所以,布局也相对简单,利用xml定义布局中包含的元素及显示内容就可以实现一个简单应用。这可以理解为静态应用。
3、如果想动态生成内容,就必须学会利用Fragments。Fragment可以添加在布局之内。一个布局内可以添加多个Fragment。当然,每个子布局的那一部分也可以添加Fragment。
4、Fragments就像我们建动画程序需要建N多帧动画一样,建立多个Fragment,相当于建立了多个动画帧,需要哪一帧,我们就将Fragment动态加入到布局中,而不需要时就把visibility设为"gone“即可(靠,为什么不是none呢?)这在菜单切换时很有用。想让手机返回键起作用,实现返回上一屏,那么看看Fragment Transaction会很有用。
>>待续