Android入门基础:从这里开始

英文: http://developer.android.com/training/index.html

中文: http://hukai.me/android-training-course-in-chinese/basics/index.html

建立第一个App

使用Android Studio创建项目

  1. 使用Android Studio创建Android项目,启动Android Studio。

    • 如果我们还没有用Android Studio打开过项目,会看到欢迎页,点击New Project。
    • 如果已经用Android Studio打开过项目,点击菜单中的File,选择New Project来创建一个新的项目。
  2. 填入内容,点击Next。

    • Application Name此处填写想呈现给用户的应用名称。
    • Company domain 包名限定符,Android Studio会将这个限定符应用于每个新建的Android项目。
    • Package Name是应用的包命名空间(同Java的包的概念),该包名在同一Android系统上所有已安装的应用中具有唯一性,我们可以独立地编辑该包名。
    • Project location操作系统存放项目的目录。
  3. 在Select the form factors your app will run on窗口勾选Phone and Tablet。

  4. Minimum SDK. Minimum Required SDK表示我们的应用支持的最低Android版本,为了支持尽可能多的设备,我们应该设置为能支持你应用核心功能的最低API版本。如果某些非核心功能仅在较高版本的API支持,你可以只在支持这些功能的版本上开启它们(参考兼容不同的系统版本),此处采用默认值即可。

  5. 不要勾选其他选项 (TV, Wear, Auto and Glass) ,点击 Next.

  6. 在Add an activity to 窗口选择 Empty Activity,点击 Next.

  7. 在Choose options for your new file 窗口.

  8. 点击Finish完成创建。

刚创建的Android项目是一个基础的Hello World项目,包含一些默认文件,我们花一点时间看看最重要的部分:

app/src/main/res/layout/activity_my.xml

这是刚才用Android Studio创建项目时新建的Activity对应的xml布局文件,按照创建新项目的流程,Android Studio会同时展示这个文件的文本视图和图形化预览视图,该文件包含一些默认设置和一个显示内容为“Hello world!”的TextView元素。

app/src/main/java/com.iosdevlog.a1helloworld/MainActivity.java

用Android Studio创建新项目完成后,可在Android Studio看到该文件对应的选项卡,选中该选项卡,可以看到刚创建的Activity类的定义。编译并运行该项目后,Activity启动并加载布局文件activity_my.xml,显示一条文本:”Hello world!”

app/src/main/AndroidManifest.xml

manifest文件描述了项目的基本特征并列出了组成应用的各个组件,接下来的学习会更深入了解这个文件并添加更多组件到该文件中。

app/build.gradle

Android Studio使用Gradle 编译运行Android工程. 工程的每个模块以及整个工程都有一个build.gradle文件。通常你只需要关注模块的build.gradle文件,该文件存放编译依赖设置,包括defaultConfig设置:

  • compiledSdkVersion 是我们的应用将要编译的目标Android版本,此处默认为你的SDK已安装的最新Android版本(目前应该是4.1或更高版本,如果你没有安装一个可用Android版本,就要先用SDK Manager来完成安装),我们仍然可以使用较老的版本编译项目,但把该值设为最新版本,可以使用Android的最新特性,同时可以在最新的设备上优化应用来提高用户体验。
  • applicationId 创建新项目时指定的包名。
  • minSdkVersion 创建项目时指定的最低SDK版本,是新建应用支持的最低SDK版本。
  • targetSdkVersion 表示你测试过你的应用支持的最高Android版本(同样用API level表示).当Android发布最新版本后,我们应该在最新版本的Android测试自己的应用同时更新target sdk到Android最新版本,以便充分利用Android新版本的特性。更多知识,请阅读Supporting Different Platform Versions。

注意/res目录下也包含了resources资源:

drawable<density>/

存放各种densities图像的文件夹,mdpi,hdpi等,这里能够找到应用运行时的图标文件ic_launcher.png

layout/

存放用户界面文件,如前边提到的activity_my.xml,描述了MyActivity对应的用户界面。

menu/

存放应用里定义菜单项的文件。

values/

存放其他xml资源文件,如string,color定义。string.xml定义了运行应用时显示的文本”Hello world!”

创建一个LinearLayout

<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="horizontal" >
      <EditText android:id="@+id/edit_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />
      <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" />
</LinearLayout>

让输入框充满整个屏幕的宽度

  1. 在activity_my.xml文件里,设置EditText的layout_weight属性值为1 .

  2. 设置EditText的layout_width值为0dp.

<?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="horizontal">
    <EditText android:id="@+id/edit_message"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" />
</LinearLayout>

启动另一个Activity

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

在Android Studio中,按Alt + Enter 可以导入缺失的类(在Mac中使用option + return).

DisplayMessageActivity的完整onCreate()方法应该如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Set the text view as the activity layout
    setContentView(textView);
}

管理Activity的生命周期

basic-lifecycle

使用Fragment建立动态UI

  • 创建一个fragment

学习如何创建一个fragment,以及实现其生命周期内的基本功能。

  • 构建有弹性的UI

学习在APP内,对不同的屏幕尺寸用fragment构建不同的布局。

  • 与其他fragments交互

学习fragment与activity及其他fragment间进行交互。

数据保存

  • 保存到Preferences

学习使用Shared Preferences文件以Key-Value的方式保存简要的信息。

  • 保存到文件

学习保存基本的文件。

  • 保存到数据库

学习使用SQLite数据库读写数据。

与其他应用的交互

  • Intent的发送(Sending the User to Another App )

如何创建一个隐式Intent唤起能够接收这个动作的App。

  • 接收Activity返回的结果(Getting a Result from an Activity)

如何启动另外一个Activity并接收返回值。

  • Intent过滤(Allowing Other Apps to Start Your Activity)

如何通过定义隐式的Intent的过滤器来使我们的应用能够被其他应用唤起。