android初学者_适用于初学者的Android Studio,第2部分:探索和编写应用程序

android初学者

更新:2020年1月。

本入门级Android Studio的第1部分中 ,您在开发环境中设置了Android Studio,并了解了用户界面。 现在,在第2部分中,您将编写第一个应用程序的代码。

这款动画手机应用程序包含一个活动,该活动展示了Google的Android机器人角色以及为该角色设置动画的按钮。 单击该按钮可使角色逐渐从绿色变为红色,再变为蓝色,然后再变为绿色。 尽管该应用不是特别有用,但编写它可以帮助您熟悉使用Android Studio。 在第3部分中,您将使用Android设备模拟器和Kindle Fire平板电脑构建并运行该应用程序

请注意,此系列已针对Android Studio 3.2.1(截至本文撰写时的当前稳定版本)进行了更新。

Android Studio的项目和编辑器窗口

我在第1部分末尾介绍了Android Studio的主窗口。该窗口分为几个区域,其中包括一个Project窗口(用于标识应用程序的资源文件)和各种编辑器窗口(用于编写代码并指定移动应用程序的资源)在Android Studio中。 图1显示了Project窗口和Editor窗口。

图1 杰夫·弗里森

图1. Android Studio的Project窗口和一个编辑器窗口(单击放大)

“项目”窗口突出显示W2A ,这是应用程序的W2A.java源文件的名称(尽管未显示.java文件扩展名)。 与W2A对应的是一个编辑器窗口,可通过在“项目”窗口中双击W2A来到达。 编辑器窗口显示文件的当前内容,在本例中为该应用程序主要活动的骨骼Java源代码。

每个编辑器窗口都与一个选项卡关联。 例如, W2A的编辑器窗口与W2A.java选项卡相关联。 第二个选项卡标识为main.xml (应用程序主要活动的默认基于XML的布局)。 通过单击窗口的选项卡,可以从一个编辑器窗口移至另一窗口。

下载
下载Android示例应用程序的源代码:W2A.java。 由Jeff Friesen为JavaWorld创建。

Android示例应用

示例应用程序( W2A.java )包含一个主要活动,该活动显示Android机器人角色和一个按钮。 当用户按下按钮时,机器人会通过一系列颜色设置动画。 在本节中,我们将探索活动的源代码和资源。

探索并编写Android示例应用程序

活动的源代码存储在清单2所示的文件W2A.java中。

清单1. W2A.java

package ca.javajeff.w2a;

import android.app.Activity;

import android.graphics.drawable.AnimationDrawable;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;
import android.widget.ImageView;

public class W2A extends Activity
{
   AnimationDrawable androidAnimation;

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      ImageView androidImage = (ImageView) findViewById(R.id.android);
      androidImage.setBackgroundResource(R.drawable.android_animate);
      androidAnimation = (AnimationDrawable) androidImage.getBackground();
      final Button btnAnimate = (Button) findViewById(R.id.animate);
      View.OnClickListener ocl;
      ocl = new View.OnClickListener()
      {
         @Override
         public void onClick(View v)
         {
            androidAnimation.stop();
            androidAnimation.start();
         }
      };
      btnAnimate.setOnClickListener(ocl);
   }
}

W2A.java文件以package语句开头,该语句命名存储W2A类的包( ca.javajeff.w2a )。 接下来是针对各种Android API类型的一系列import语句。 接下来,代码描述了W2A类,该类扩展了android.app.Activity

W2A首先声明一个类型为android.graphics.drawable.AnimationDrawableandroidAnimation实例字段。 AnimationDrawable类型的对象描述逐帧动画,其中当前的可绘制对象被替换为动画序列中的下一个可绘制对象。

什么是可绘制对象?

可绘制对象是可以绘制的东西,例如图像。 AnimationDrawable间接扩展了抽象的android.graphics.drawable.Drawable类,该类是可绘制对象的常规抽象。

onCreate()方法

该应用程序的所有工作都在W2A重写的onCreate(Bundle)方法中进行:不需要其他方法,这有助于使该应用程序保持简单。

onCreate(Bundle)首先调用其同名的超类方法,所有覆盖活动方法都必须遵循该规则。

然后,此方法执行setContentView(R.layout.main)来建立应用程序的用户界面。 R.layout.main是应用程序资源的标识符(ID),该资源位于单独的文件中。 您对这个ID的解释如下:

  • R是在构建应用程序时生成的类的名称。 该类之所以称为R是因为其内容标识了各种应用程序资源,包括布局,图像,字符串和颜色。
  • layout是嵌套在R中的类的名称。 其ID存储在此类中的应用程序资源描述了特定的布局资源。 每种应用程序资源都与以类似方式命名的嵌套类相关联。 例如, string标识字符串资源。
  • main是在layout声明的基于int的常量的名称。 此资源ID标识主布局资源。 具体而言, main指的是存储主要活动的布局信息的main.xml文件。 mainW2A唯一的布局资源。

R.layout.main传递给Activityvoid setContentView(int layoutResID)方法可指示Android使用存储在main.xml的布局信息创建用户界面屏幕。 在后台,Android创建了main.xml描述的用户界面组件,并将它们放置在设备屏幕上,如main.xml的布局数据所指定。

该屏幕基于视图 (用户界面组件的抽象)和视图组 (对相关用户界面组件进行分组的视图)。 视图android.view.View类的子类的类的实例,类似于AWT / Swing组件。 视图组是抽象android.view.ViewGroup类的子类的类的实例,类似于AWT / Swing容器。 Android将特定的视图(例如按钮或微调器)称为小部件

继续, onCreate(Bundle)执行ImageView androidImage = (ImageView) findViewById(R.id.android); 。 该语句首先调用ViewView findViewById(int id)方法来查找在main.xml声明并标识为androidandroid.widget.ImageView元素。 它实例化ImageView并将其初始化为main.xml文件中声明的值。 然后,该语句将该对象的引用保存在局部变量androidImage

ImageView和AnimationDrawable

接下来, androidImage.setBackgroundResource(R.drawable.android_animate); 语句调用ImageView的继承自View void setBackgroundResource(int resID)方法,将视图的背景设置为resID标识的资源。 R.drawable.android_animate参数标识一个名为android_animate.xml的XML文件(稍后提供),该文件存储有关动画的信息,并存储在resdrawable子目录中。 setBackgroundResource()调用将androidImage视图链接到android_animate.xml描述的图像序列,该序列将在此视图上绘制。 此方法调用的结果是绘制了初始图像。

ImageView通过调用AnimationDrawable方法使应用程序为一系列可绘制对象设置AnimationDrawable 。 在应用程序执行此操作之前,它必须获取ImageViewAnimationDrawableandroidAnimation = (AnimationDrawable) androidImage.getBackground(); 接下来的赋值语句通过调用ImageView的(从View )继承的Drawable getBackground()方法来完成此任务。 此方法返回给定ImageViewAnimationDrawable ,随后将其分配给androidAnimation字段。 AnimationDrawable实例用于启动和停止动画,我将在稍后描述该过程。

最后, onCreate(Bundle)创建“ 动画”按钮。 它调用findByViewId(int)main.xml获取按钮信息,然后实例化android.widget.Button类。

然后,它使用View类的嵌套onClickListener接口创建一个侦听器对象。 每当用户单击按钮时,都会调用此对象的void onClick(View v)方法。 通过调用Viewvoid setOnClickListener(AdapterView.OnClickListener listener)方法,将侦听器与其Button对象一起注册。

要停止然后启动动画, Animate的单击侦听器将调用androidAnimation.stop(); 其次是androidAnimation.start(); 。 在start()之前调用stop()方法,以确保随后单击Animate按钮会导致新的动画开始。

更新并保存您的代码

在继续之前,用清单1中的代码替换W2A.java选项卡中的骨架代码。按Ctrl + S 保存此窗口的内容,或者从File菜单中选择Save All

编码Android应用程序的main.xml

该应用程序的主要活动与基于XML的布局相关联,该布局存储在文件main.xml ,如清单2所示。

清单2. main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center"
              android:background="#ffffff">
   <ImageView android:id="@+id/android"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginBottom="10dip"/>
   <Button android:id="@+id/animate"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/animate"/>
</LinearLayout>

在XML声明之后,清单2声明一个LinearLayout元素,该元素指定一个布局 (一个视图组,以某种方式在Android设备的屏幕上排列包含的视图),以在屏幕上水平或垂直地排列包含的小部件(包括嵌套的布局)。

<LinearLayout>标记指定了一些用于控制此线性布局的属性。 这些属性包括:

  • orientation将线性布局标识为水平或垂直。 包含的小部件水平或垂直放置,默认方向是水平。 "horizontal""vertical"是可以分配给该属性的唯一合法值。
  • layout_width标识布局的宽度。 合法值包括"fill_parent" (与父级一样宽)和"wrap_content" (要宽到足以包含内容)。 (请注意, fill_parent在Android 2.2中已重命名为match_parent ,但仍受支持并广泛使用。)
  • layout_height标识布局的高度。 合法值包括"fill_parent" (与父级一样高)和"wrap_content" (足够高以包含内容)。
  • gravity确定布局相对于屏幕的放置方式。 例如, "center"指定布局应在屏幕上水平和垂直居中。
  • background标识背景图像,渐变或纯色。 为简单起见,我对十六进制颜色标识符进行了硬编码,以表示纯白色背景( #ffffff )。 (颜色通常存储在colors.xml并从该文件中引用。)

LinearLayout元素封装了ImageViewButton元素。 这些元素中的每一个都指定一个id属性,该属性标识该元素,以便可以从代码中引用它。 分配给该属性的资源标识符 (以@开头的特殊语法)以@+id前缀开头。 例如, @+id/androidImageView元素标识为android ; 通过指定R.id.android从代码中引用此元素。

这些元素还指定layout_widthlayout_height属性,以确定其内容的布局方式。 每个属性都分配了wrap_content以便该元素以其自然大小显示。

ImageView指定layout_marginBottom属性,以标识其自身与垂直跟随的按钮之间的空格。 该空间指定为10 倾角或与密度无关的像素 。 这些是虚拟像素,应用程序可使用这些虚拟像素以与屏幕密度无关的方式表示布局尺寸/位置。

密度无关像素

密度无关的像素 (dip)等效于160 dpi屏幕上的一个物理像素,基线密度由Android假定。 在运行时,Android会根据使用中的屏幕实际密度,透明地处理所需的下垂单位的任何缩放比例。 通过以下公式将浸入单位转换为屏幕像素: 像素=浸入量*(密度/ 160) 。 例如,在240 dpi的屏幕上,1倾角等于1.5物理像素。 Google建议使用浸入单元定义应用程序的用户界面,以确保在不同设备屏幕上正确显示用户界面。

选择并保存新布局

翻译自: https://www.infoworld.com/article/3104621/android-studio-for-beginners-part-2-explore-and-code-the-app.html

android初学者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值