一、UI界面开发
常见控件:TextView、Button、EditText、ImageView、ProgressBar、AlertDialog、ProgressDialog。
四大布局方式:LinearLayout、RelativeLayout、FrameLayout、TableLayout。
自定义控件与ListView定制及优化
dp与sp:dp是密度无关像素的意思, 也被称作dip, 和px相比, 它在不同密度的屏幕中的显示比例将保持一致。sp是可伸缩像素的意思, 它采用了和dp同样的设计理念, 解决了文字大小的适配问题。Android中的密度就是屏幕每英寸所包含的像素数,通常以dpi为单位。比如一个手机屏幕的宽是2英寸长是3英寸,如果它的分辨率是320*480像素,那这个屏幕的密度就是160dpi,如果它的分辨率是640*960,那这个屏幕的密度就是320dpi, 因此密度值越高的屏幕显示的效果就越精细。
二、碎片(Fragment)
碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间, 因而在平板上应用的非常广泛。
动态添加碎片步骤
动态添加碎片主要分为5步。
1.创建待添加的碎片实例。
2.获取到FragmentManager,在活动中可以直接调用getFragmentManager()方法得到。
3.开启一个事务,通过调用beginTransaction()方法开启。
4.向容器内加入碎片, 一般使用replace()方法实现, 需要传入容器的id和待添加的碎片实例。
5.提交事务,调用commit()方法来完成。
在碎片中模拟返回栈
FragmentTransaction中提供了一个addToBackStack()方法,可以用于将一个事务添加到返回栈中,模仿类似于返回栈的效果,按下Back键可以回到上一个碎片。
碎片与活动之间通信
为了方便碎片和活动之间进行通信,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例。
RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);
调用FragmentManager的findFragmentById()方法, 可以在活动中得到相应碎片的实例,然后就能轻松地调用碎片里的方法了。
每个碎片中都可以通过调用getActivity()方法来得到和当前碎片相关联的活动实例,有了活动实例之后, 在碎片中调用活动里的方法就变得轻而易举了。 另外当碎片中需要使用Context对象时, 也可以使用getActivity()方法, 因为获取到的活动本身就是一个Context对象了。
MainActivity activity = (MainActivity) getActivity();
碎片的生命周期
1.运行状态
当一个碎片是可见的, 并且它所关联的活动正处于运行状态时, 该碎片也处于运行状态。
2.暂停状态
当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态。
3.停止状态
当一个活动进入停止状态时, 与它相关联的碎片就会进入到停止状态。 或者通过调用FragmentTransaction的remove()、replace()方法将碎片从活动中移除,但有在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。
4.销毁状态
碎片总是依附于活动而存在的, 因此当活动被销毁时, 与它相关联的碎片就会进入到销毁状态。或者通过调用FragmentTransaction的remove()、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,这时的碎片也会进入到销毁状态。
碎片还提供了一些附加的回调方法:
1. onAttach()
当碎片和活动建立关联的时候调用。
2. onCreateView()
为碎片创建视图(加载布局)时调用。
3. onActivityCreated()
确保与碎片相关联的活动一定已经创建完毕的时候调用。
4. onDestroyView()
当与碎片关联的视图被移除的时候调用。
5. onDetach()
当碎片和活动解除关联的时候调用。
动态加载布局
1.使用限定符
2.使用最小限定符
使用large限定符成功解决了单页双页的判断问题,不过很快又有一个新的问题出现了,large到底是指多大呢?有的时候我们希望可以更加灵活地为不同设备加载布局,不管它们是不是被系统认定为 “large”,这时就可以使用最小宽度限定符(Smallest-width Qualifier)了。
最小宽度限定符允许我们对屏幕的宽度指定一个最小指(以dp为单位), 然后以这个最小值为临界点, 屏幕宽度大于这个值的设备就加载一个布局, 屏幕宽度小于这个值的设备就加载另一个布局。