评论

收藏

[Android] 001 Android开发初体验

移动开发 移动开发 发布于:2022-06-12 10:00 | 阅读数:256 | 评论:0

1、简介
注:本文代码参考
我们将开发本系列第一个应用,并借此学习一些Android基本概念以及构成应用的UI组件。
初学习,如果没能全部理解,也不必担心,后续还会涉及这些内容并有更加详细的讲解。
马上要开发的应用名叫GeoQuiz,它能给出一道道地理知识问题。用户点击TRUE或FALSE
按钮来回答屏幕上的问题,GeoQuiz即时作出反馈。
下图显示了用户点击TRUE按钮的结果:
用户点击TRUE按钮图,图1
DSC0000.jpg
QuizActivity 的用户界面需要下列组件:

  • 一个垂直 LinearLayout 组件;
  • 一个 TextView 组件;
  • 一个水平 LinearLayout 组件;
  • 两个 Button组件。
组件是如何构成 QuizActivity 用户界面图 图4:
DSC0001.jpg
下面我们在activity_quiz.xml文件中定义这些组件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:gravity="center"
  android:orientation="vertical" >
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="24dp"
    android:text="@string/question_text" />
  <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>
上述代码暂时不理解也没关系,后续学习中逐渐弄明白的。
注意,开发工具无法校验布局XML内容,拼写错误早晚会出问题,应尽量避免。
可以看到,有三行以 android:text 开头的代码出现了错误信息。暂时忽略它们,稍后会
处理。
对照上图用户界面查看XML文件,可以看出组件与XML元素一一对应。元素的名
称就是组件的类型

各元素均有一组XML属性。属性可以看作如何配置组件的指令。
为方便理解元素与属性的工作原理,接下来我们将以层级视角来研究布局。
1.2.1、视图层级结构
组件包含在视图(View)对象的层级结构中,这种结构又称作视图层级结构(view hierarchy)
上述代码所示的XML布局对应的视图层级结构图 图5:
DSC0002.jpg
首先回到strings.xml文件,如下代码所示,为toast添加消息显示用的字符串资源。
<resources>
  <string name="app_name">GeoQuiz</string>
  <string name="question_text">Canberra is the capital of Australia.</string>
  <string name="true_button">True</string>
  <string name="false_button">False</string>
  <string name="correct_toast">Correct!</string>
  <string name="incorrect_toast">Incorrect!</string>
</resources>
调用 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消息。
在 QuizActivity 代码里,分别调用 makeText(...) 方法。在添加
makeText(...) 时,可利用Android Studio的代码自动补全功能,让代码输入更轻松。
使用代码自动补全
代码自动补全功能可以节约大量开发时间,越早掌握受益越多。
依次输入下面代码。当输入到 Toast 类后的点号时,Android Studio会弹出一
个窗口,窗口内显示了建议使用的 Toast 类的常量与方法。
要选择需要的建议方法,使用上下键。(如果不想使用代码自动补全功能,请不要按Tab键、
Return/Enter键,或使用鼠标点击弹出窗口,只管继续输入代码直至完成。)
在建议列表里,选择 makeText(Context context, int resID, int duration) 方法,代
码自动补全功能会自动添加完整的方法调用。
完成 makeText 方法的全部参数设置,完成后的代码如下代码所示:
mTrueButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    Toast.makeText(QuizActivity.this,
    R.string.correct_toast,
    Toast.LENGTH_SHORT).show();
    // Does nothing yet, but soon!
  }
});
mFalseButton = (Button) find ViewById(R.id.false_button);
mFalseButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    Toast.makeText(QuizActivity.this,
    R.string.incorrect_toast,Toast.LENGTH_SHORT).show();
  }
});
在 makeText(...) 里,传入 QuizActivity 实例作为 Context 的参数值。注意此处应输入的
参数是 QuizActivity.this ,不要想当然地直接输入 this 。因为匿名类的使用,这里的 this 指
的是监听器 View.OnClickListener 。
使用代码自动补全功能,自己也就不用导入 Toast 类了,因为Android Studio会自动导入相
关类。
好了,现在可以运行应用了。
1.6、 使用模拟器运行应用
运行Android应用需使用硬件设备或虚拟设备(virtual device)。包含在开发工具中的Android
设备模拟器可提供多种虚拟设备。
要创建Android虚拟设备(AVD),在Android Studio中,选择Tools → Android → AVD Manager
菜单项。AVD管理器窗口弹出时,点击窗口左下角的+Create Virtual Device…按钮。一路next,详细的创建不赘述了。
创建完成后即可启动运行。
AVD创建成功后,我们用它运行GeoQuiz应用。点击Android Studio工具栏上的Run按钮,或
者使用Control+R快捷键。Android Studio会自动找到新建的虚拟设备,安装应用包(APK),然后
启动并运行应用。
模拟器的启动过程比较耗时,请耐心等待。等设备启动完成,应用运行后,就可以在应用界
面点击按钮,让toast告诉你答案了。
假如启动时或在点击按钮时,GeoQuiz应用崩溃,可以在Android DDMS工具窗口的LogCat
视图中看到有用的诊断信息。(如果LogCat没有自动打开,可点击Android Studio窗口底部的
Android Monitor按钮打开它。),查看日志。
最好不要关掉模拟器,这样就不必在反复运行调试应用时,浪费时间等待AVD启动了。
单击AVD模拟器上的后退按钮可以停止应用。这个后退按钮的形状像一个指向左侧的三角形
(在较早版本的Android中,它像一个U型箭头)。需要调试变更时,再通过Android Studio重新运
行应用。
模拟器虽然好用,但在实体设备上测试应用能获得更准确的结果。
1.7、深入学习:Android 编译过程
学习到这里,你可能迫切想知道Android是如何编译的。
你已经知道在项目文件发生变化时,
Android Studio无需指示便会自动进行编译。
在整个编译过程中,Android开发工具将资源文件、
代码以及AndroidManifest.xml文件(包含应用的元数据)编译生成.apk文件。.apk文件要在模拟器上
运行,还需以debug key签名。(分发.apk应用给用户时,应用必须以release key签名。更多有关编译
过程的信息,可参考Android开发文档网页developer.android.com/tools/publishing/preparing.html。)
那么,应用的activity_quiz.xml布局文件的内容该如何转变为 View 对象呢?作为编译过程的
一部分,aapt(Android Asset Packaging Tool)将布局文件资源编译压缩紧凑后,打包到.apk文件
中。
然后,在 QuizActivity 类的 onCreate(Bundle) 方法调用 setContentView(...) 方法时,
QuizActivity 使用 LayoutInflater 类实例化布局文件中定义的每一个 View 对象,如图8所示:
DSC0003.jpg
1.7.1、Android 编译工具
当前,我们看到的项目编译都是在Android Studio里执行的。编译功能已整合到IDE中,IDE
负责调用aapt等Android标准编译工具,但编译过程本身仍由Android Studio管理。
有时,出于某种原因,可能需要脱离Android Studio编译代码。最简单的方法是使用命令行
编译
工具。现代Android编译系统使用Gradle编译工具
要从命令行使用Gradle,请切换到项目目录并执行以下命令:
$ ./gradlew tasks
如果是Windows系统,执行以下命令:
gradlew.bat tasks
执行以上命令会显示一系列可用任务。你需要的任务是installDebug,因此,再执行以下命令:
$ ./gradlew installDebug
如果是Windows系统,执行以下命令:
gradlew.bat installDebug
以上命令将把应用安装到当前连接的设备上,但不会运行它。要运行应用,需要在设备上手
动启动。


   
   
   
                        

关注下面的标签,发现更多相似文章