《Android编程权威指南》第3版读书笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gaolh89/article/details/81213044

(一)第1章:Android开发初体验

1.android:text属性
P11页

TextView与Button组件具有android: text属性。该属性指定组件要显示的文字内容。
请注意,android:text属性值不是字符串值,而是对字符串资源( stringresource )的引用。字符串资源包含在一个独立的名叫strings的XML文件中( strings.xml ),虽然可以硬编码设置组件的文本属性值,如android:text= “True”,但这通常不是个好主意。比较好的做法是:将文字内容放置在独立的字符串资源XML文件中,然后引用它们。这样会方便应用的本地化(支持多国语言)。

2.AppCompatActivity
P13页

AppCompatActivity它实际就是一个Activity子类,能为Android旧版本系统提供兼容支持.

3.资源与资源ID
P13-14页

在项目切换至Project视图。Project视图会显示出当前项目的所有文件和目录。
展开目录app/build/generated/sourcelr/debug.找到项目包名称并打开其中的R.java文件,即可看到当前应用当前所有的资源。R.java文件在Android项目编译过程中自动生成,如该文件头部的警示所述,请不要修改该文件的内容。
修改布局或字符串等资源后,R.java文件不会实时刷新。as另外还存有一份代码编译用的R. java隐藏文件。当前代码编辑区打开的R.java文件仅在应用安装至设备或模拟器前产生,因此只有在Android Studio中点击运行应用时,它才会得到更新。
R.java文件通常比较大,比如书中GeoQuiz应用,目前只有1个界面,3个按钮,R.java文件加上注释,就是1万多行代码.
我们看一下R.java文件的注解部分

/* AUTO-GENERATED FILE. DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found. It
 * should not be modified by hand.
 */

根据翻译: 自动生成的文件.不能更改.
这个类是通过aapt工具自动生成的资源数据.它不应该被手动修改.

4.设置监听器
P17页

Android应用属于典型的事件驱动类型.不像命令行或脚本程序,事件驱动型应用启动后,即开始等待行为事件的发生,如用户点击某个按钮.(事件也可以由操作系统或其他应用触发,但用户触发的事件更直观,如点击按钮.)

应用等待某个特定事件的发生,也可以说应用正在”监听”特定事件.为响应某个事件而创建的对象叫做监听器(listener).监听器会实现特定事件的监听器接口(listener interface).

(二)第2章:Android与MVC设计模式

P44页

ImageButton有android:contentDescription 属性.该属性能为视力障碍用户提供方便.在为其设置文字属性值后,如果设备的可访问行选项作了相应设置,那么用户点击图形按钮时,设备便会读出属性值的内容.

(三)第3章:activity的生命周期

1.之前关于生命周期写过一篇博客. 点击跳转

2.设备配置与备选资源
P52-53页

旋转设备会改变设备配置.设备配置实际是一系列特征组合,用来描述设备当前状态.这些特征有: 屏幕方向、屏幕像素密度、屏幕尺寸、键盘类型、底座模式以及语言等.

通常,为匹配不同的设备配置,应用会提供不同的备选资源.为适用不同分辨率的屏幕,向项目添加多套同一个命名(并放在不同文件夹下)的图标就是这样一个使用案例.

设备的屏幕像素密度是个固定的设备配置,无法在运行时发生改变.然而,屏幕方向等特征可以在应用运行时改变.

在运行时配置变更发生时,可能会有更适合的资源来匹配新的设备配置.于是,Android销毁当前activity,为新配置寻找最近资源,然后创建新实例使用这些资源.

…..

设备处于水平方向时,Android会找到并使用res/layout-land目录下的布局资源.其他情况下,它会默认使用res/layout 目录下的布局资源.

3.保存数据以应对设备旋转
P56-58页

先重写onSaveInstanceState(Bundle)方法.

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(KEY_INDEX, mCurrentIndex);
    }

通过重写onSaveInstanceState(Bundle)方法,将一些数据保存在bundle中.

然后在onCreate(Bundle)方法中取出这些数据:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_quiz);

        if (savedInstanceState != null) {
            mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
        }
    }

….

注意,在Bundle中存储和恢复的数据类型只能是基本类型以及可以实现Serializable或Parcelable接口的对象.在Bundle中保存定制类对象不是个好主意,因为你取出的对象可能已经没用了.比较好的做法是,通过其他方式保存定制类对象,而在Bundle中保存标识对象的基本类型数据.

(四)第4章:Android应用的调试

1.使用Android Lint
P70-71页

Android Lint是Android应用代码的静态分析器( staticanalyzer)。作为-一个特殊程序,它能在不运行代码的情况下检查代码错误。凭着对Android框架的熟练掌握,AndroidLint能深人检查代码,找出编译器无法发现的问题。在大多数情况下,AndroidLint检查出的问题都值得重视。
….

假如想主动查看项目中的所有潜在问题,可以选择Analyze→Inspect Code..菜单项手动运行Lint。在被问及检查项目的哪部分时,选择Whole project。 Android Studio会 立即运行Lint和其他一些静态分析器开始分析代码。
这里写图片描述

检查完毕,所有的潜在问题会按类别列出。展开Android Lint类别,可看到具体的Lint信息,如下图所示:
继续展开还可以看到更加详细的信息,包括问题发生的地方.
这里写图片描述

(五)第5章:创建第二个activity

1.TextView的tools属性的使用
P77页

<TextView
    android:id="@+id/answer_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="24dp"
    tools:text="Answer"
 />

注意用于显示答案的TextView组建,它的tools和tools:text属性的命名空间比较特别.改命名空间可以覆盖某个组建的任何属性.这样,就可以在as预览中看到效果.TextView有text属性.可以为它提供初始值,因而在应用运行前就知道它大概的样子.而在应用运行时,Answer文字不会显示出来.

猜你喜欢

转载自blog.csdn.net/gaolh89/article/details/81213044
今日推荐