胡凯

Android Training - 适配不同的屏幕(Lesson 3 - 实现可适配的UI流程)

| Comments

Implementing Adaptative UI Flows

根据显示不同的layout,我们需要设计不同的UI flow。比如如果你的AP是dual-pane的模式,点击左边list的item的时候,会在右边直接显示对应的内容,如果是single-pane的模式,那么需要跳转到另外一个Activity来显示对于的内容

注:个人认为目前很多AP都会针对比较大的屏幕设计一个对于的版本,比如QQ Pad版,QQ HD版,QQ Pad Mini版,这些信息可以看出来大多数情况,还是不太会采取同一份代码适应所有屏幕的方案。 这一课主要就是讲如何在运行的时候判断当前的布局,从而让AP选择不同行为。

Android Training - 适配不同的屏幕(Lesson 2 - 适配不同屏幕密度)

| Comments

Supporting Different Densities

上一篇文章和大家分享了如何适配不同大小的屏幕,有个概念需要提前弄清楚,屏幕大的不一定就分辨率高,详细请看下面的内容。
This lesson shows you how to support different screen densities by providing different resources and using resolution-independent units of measurements.
我们需要通过提供不同的resources来support不同的屏幕密度,使用一种独立与分辨率的测量单元来表示(也就是dp)

Use Density-independent Pixels[使用设备独立像素dp/sp]

前一节,我们就提到过,一定要避免使用绝对pixels(像素)的方式来设计layout的大小或者距离,因为不同的的屏幕有不同的像素密度,所以相同的像素在不同的设备上物理大小会有区别。通常我们都会在需要的时候使用dp,或者sp来表示大小

Android Training - 适配不同的屏幕(Lesson 1 - 支持不同的屏幕大小)

| Comments

Android设备屏幕不一,为了更好的用户体验,我们必须做适配不同屏幕的操作

  • Dependencies and prerequisites
    Android 1.6 or higher (2.1+ for the sample app)
    Basic knowledge of Activities and Fragment
    Experience building an Android User Interface
    Several features require the use of the support library
  • You should also read
    Supporting Multiple Screens
  • Download the sample app
    NewsReader.zip

Supporting Different Screen Sizes

Use “wrap_content” and “match_parent”[使用wrap_content与match_parent]

  • wrap_content:宽高根据内容大小调整
  • match_parent:伸展至与父控件一致
    显然我们不能hard-coded(写死大小)

Android Training - 详解Activity生命周期(Lesson 4 - 重新创建销毁的activity)

| Comments

  • 有几个场景中,Activity是由于正常的程序行为而被Destory的,例如当用户点击返回按钮或者是你的Activity通过调用finish()来发出停止信号。系统也有可能会在你的Activity处于stop状态且长时间不被使用,或者是在前台activity需要更多系统资源的时候把关闭后台进程,这样来获取更多的内存。
  • 当你的Activity是因为用户点击Back按钮或者是activity通过调用finish()结束自己时,系统就丢失了Activity实例这个概念,因为前面的行为意味着不再需要这个activity了。然而,如果因为系统资源紧张而导致Activity的Destory, 系统会在用户回到这个Activity时有这个Activity存在过的记录,系统会使用那些保存的记录数据(描述了当Activity被Destory时的状态)来重新创建一个新的Activity实例。那些被系统用来恢复之前状态而保存的数据被叫做 “instance state” ,它是一些存放在Bundle对象中的key-value pairs。(请注意这里的描述,这对理解onSaveInstanceState执行的时刻很重要)

Caution:你的Activity会在每次旋转屏幕时被destroyed与recreated。当屏幕改变方向时,系统会Destory与Recreate前台的activity,因为屏幕配置被改变,你的Activity可能需要加载一些alternative的资源(例如layout).