美文网首页
《Android编程权威指南》学习记录(一)

《Android编程权威指南》学习记录(一)

作者: Magee_yuan | 来源:发表于2016-03-24 17:50 被阅读259次
    Android编程权威指南

    <献词
    献给Donovan。他很忙,但他知道什么时候该用Fragment。
    ——B.H

    <聚焦习惯而不是目标


    Android 应用初体验

    我们要做一个测试用户地理知识的软件 GeoQuiz,然后我们会从中学到Android开发基础知识

    1.1 应用基础

    这部分算是简单的需求分析,我们的应用需要什么,有哪部分组成。
    在开发一个应用之前我们要对自己的应用有足够的认识,需要用到什么框架,哪些技术点,哪些jar包等

    GeoQuiz应用是由一个Activity 和一个布局(Layout)组成。

    Activity

    activity 是Android SDK中 Activity类的一个具体实例,负责管理用户与信息屏的交互。应用的功能是通过编写一个个Activity子类来实现的。

    布局(Layout)

    布局 定义了一系列用户界面对象以及它们显示在屏幕上的位置。

    1.2 创建 Android项目

    首先我们来创建一个Android项目。Android项目包含组成一个应用的全部文件。(书中用的IDE是 Eclipse,所以具体创建项目的步骤这里就不写了。)

    注意:
    1.包名命名规则:包名要遵循“DNS反转” 约定,即将企业组织或公司的域名反转后,在尾部附加上应用名称。遵循此约定可以保证包名的唯一性。
    2.Activity命名规则:创建子类activity时,最好是遵守“名字+Activity后缀” 如:QuizActivity=Quiz+Activity。尽管不是必需的,但是建议遵守这一命名约定。
    3.布局命名规则:将activity名称的单词顺序颠倒过来,并全部转换为小写字母,然后在单词间添加下划线。如:activity_quiz。

    这里加一个链接,大神总结的 Android 命名规范

    1.3 Eclipse 工作区导航

    在这贴一张AS(Android Studio)工作区


    Android Studio工作区

    Eclipse即将从Android历史舞台退出,所以大家还是多学习AS就好!

    1.4 用户界面设计

    这里我在插一嘴,Material Design,Google推出的全新的设计语言

    开始上代码

    默认的activity布局(activity_quiz.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.magee.geoquiz.QuizActivity">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"/>
    </RelativeLayout>
    

    我们看到,应用activity的布局默认定义了两个组件(widget)RelativeLayoutTextView

    组件:
    是组成用户界面的构造模块。组件可以显示文字或图像,与用户交互,甚至是布置屏幕上的其他组建。
    按钮(Button),文本输入控件(EditText),选择框(CheckBox)等都是组件。
    Android SDK内置了多种组件,通过配置各种组建可获得所需要的用户界面及行为。每一个组件是View类或其子类(如TextView 或 Button)的一个具体实例。


    现在开始GeoQuiz应用介绍

    QuizActivity的用户界面需要下列五个组件:

    • 一个垂直LinearLayout组件;
    • 一个TextView组件;
    • 一个水平LinearLayout组件;
    • 两个Button组件;

    看看以上组件是如何构成QuizActivity用户界面的


    布置并显示在屏幕上的组件

    然后看看这个布局代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">
        <TextView
            android:padding="24dp"
            android:text="@string/question_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/true_button"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/false_button"/>
        </LinearLayout>
    </LinearLayout>
    

    求助,谁知道这个问题怎么解决。我用Eclipse的代码全部复制过来就是原来的样子显示。我找了一下午没找到办法,所以下次代码只能在Eclipse中写了。不能让我写完代码了还一个一个加空格,手动格式化显示吧?```

    视图层级结构

    布局中组件及属性的层级结构

    需要注意的是,根元素(当前布局中就是最上面的LinearLayout组件)必须指定Android XML资源文件的命名空间属性(命名空间属性就是xmlns,XML Namespaces),当前就是xmlns:android=" http://schemas.android.com/apk/res/android "。

    LinearLayout组件继承自View子类的ViewGroup组件。ViewGroup组件是一个包含并配置其他组件的特殊组件。在这先灌输一下Android的五大组件LinearLayout,RelativeLayout,FrameLayout,TableLayout,AbsoluteLayout(这个是绝对布局,正常情况下不会用到)

    组件属性

    属性 可以看作是如何配置 组件 的指令。
    下面我们来看一些常用属性。

    • android:layout_width和android:layout_height:
      几乎每类组件都需要这两个属性,他们通常被设置为一下两种属性值之一。
      *match_parent:视图与其父类视图大小相同
      *wrap_content:视图将根据其内容自动调整大小。
      (以前还有一个fill_parent属性值,等同于match_parent,目前已废弃不用。)
    • android:orientation属性
      它是LinearLayout组件特有的属性,可以指定子组件在屏幕上排列的方向。其两个属性值vertical 和 horizontal分别表示垂直排列和水平排列。
    • android :text属性
      该属性指定组件显示的文字内容。这里需要知道android:text的属性最好是从strings的XML文件中引用过来的字符串资源(下面会学习),不要在代码中以硬编码的形式赋值。

    创建字符串资源

    每个项目都包含一个名为strings.xml的默认字符串文件。当我们要添加字符串资源时候可以在这里定义,而我们只需要@string/在strings.xml里定义的名字 来引用即可。如:

    <string name="true_button">正确</string>
    android:text="@string/true_button"
    这时候android:text的属性值就是“正确”。

    从布局XML到视图对象

    XML元素是如何转换为视图对象的?

    答案就在Activity的onCreate(Bundle)方法中的setContentView()中。
    我们只需要把我们创建好的XML布局ID传给setContentView()方法中即可。如:
    setContentView(R.layout.activity_quiz)

    该方法生成指定布局的视图并将其放置在屏幕上。布局视图生成后,布局文件包含的组件也随之以各自的属性定义完成实例化。

    资源与资源ID

    布局 是一种 资源 。资源是应用非代码形式的内容,比如图像文件,音频文件以及XML文件等。项目中所有的资源文件都存放在目录res的子目录下。

    这里我们要学习一个新的属性:android :id ="@+id/id名"

    当我们需要某一个控件的时候,可以用它的id来查找获取。(后面会讲)

    组件的实际应用

    按照顺序来写:

    • 首先,我们要定义一个组件类型的成员变量,并且给变量取名

    private Button mTrueButton;

    • 然后通过Activity的方法引用已生成的组件,方法为:

    public View findViewById(int id)
    该方法接受组件的资源ID作为参数,返回一个View(视图)对象。

    mTrueButton=(Button)findViewById(R.id.true_button);

    这样,我们就已经获得了该组件的实例变量mTrueButton

    设置监听器

    Android应用属于典型的事件驱动类型 。事件驱动类型应用启动后,即开始等待行为事件的发生,如用户点击某个按钮。

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

    无需自己编写,Android SDK已经为各种事件内置开发了很多监听器接口。当前应用需要监听用户的按钮“单机”事件,因此监听器需实现 View.OnClickListener 接口

    mTrueButton.setOnClickListener(new View.OnClickListener(){  
     @Override 
     public void onClick(View v){
      这里写点击后实现的方法
     } 
    });
    
    • 使用匿名内部类
      SetOnClickListener(OnClickListener)方法的监听器参数是一个匿名内部类
      用匿名内部类的两大好处:

    1,因为匿名内部类的使用,我们可在同一处实现监听器方法,代码更清晰可读。
    2,事件监听器一般只在一处使用一次,使用匿名内部类可避免不必要的命名类实现。

    • 创建提示消息

    Toast 是Android中显示消息的机制,它没有交点,而且有时间限制。过一定时间就会自动消失。

    通过调用来自Toast类的一下方法创建toast:

     public static Toast makeText(Context context,int resId,int duration)
    

    该方法的Context参数通常是Activity的一个实例(Activity本身就是Context的子类)。
    第二个参数是toast待显示字符串消息的资源ID。Toast类必须利用context才能找到并使用字符串的资源ID。
    第三个参数通常是两个Toast常量中的一个用来指定toast消息显示的持续时间。
    创建Toast后,可通过调用Toast.show()方法使toast消息显示在屏幕上。

    Toast.makeText(QuizActivity.this,"我是吐司",Toast.LENGTH_SHORT).show();
    

    使用模拟器运行应用

    虽然Eclipse和Android Studio都自带有模拟器,但是我还是建议大家用手机测试,或者用Genymotion测试。因为自带的,真的好慢。(不过据说AS2.2的模拟器已经很快了)

    深入学习:Android编译过程

    android编译过程

    Android程序编译过程

    相关文章

      网友评论

          本文标题:《Android编程权威指南》学习记录(一)

          本文链接:https://www.haomeiwen.com/subject/diprlttx.html