android开发手记一

时间:2021-12-29 08:49:33
  1. 初识安卓—工具准备

一般是要下载java,eclipse,android sdk。

下载java sdk,配置环境变量。测试java是否安装成功。

 android开发手记一

然后去android developers网站http://developer.android.com/sdk/index.html,下载对应的版本(例如adt-bundle-windows-x86-20131030.zip),解压到特定文件夹,启动解压的目录下(如F:\adt-bundle-windows-x86-20131030\eclipse)的eclipse(因为这个版本已经包含了eclipse)即可

  1. 第一个app开发

在eclipse中,点击New à Android Application Project,输入如下内容

 android开发手记一

点击Next,出现如下设置启动图标

 android开发手记一

本例中直接Next,然后进入activity模板设置界面

 android开发手记一

本例选择Blank Activity,Next

 android开发手记一

Finish结束。

  1. 运行App

在开发之前,有必要先了解下一些重要文件的组成。

(1)       AndroidManifest.xml

这个文件定义了一些这个app的基本特征,其中最重要的一个元素是<uses-sdk>,它用来描述了这个app与android的适配程度,android:targetSdkVersion这个元素应该尽可能高,表示最新版本,并在其描述的版本下进行测试。

(2)       src/

app的源代码目录,默认包含一个app启动时使用app icon的Activity类

(3)       res/

包含一些子类。

1)  drawable-hdpi/

drawable objects (such as bitmaps)的目录,用于高分辨率屏幕。

其他drawable目录包含对应分辨率的目录

2)  layout/

用于定义app用户界面的文件

3)  values/

各种xml文件目录,包含String和color等定义。

         当你运行一个默认的app,它会首先调用默认的Activity类,然后加载layout文件,显示helloworld

  1. 运行在真实的机器

使用usb数据线接上电脑,在安卓机启用USB debugging。(如果是android 3.2以前的是在设置 – 应用  --- 开发,4.0以后在设置 – 开发选项,其中开发选项默认是隐藏的,需要在设置 --- 关于手机里,点击Build number 7次,再回去就发现有该选项了)

在eclipse中运行

打开项目中任一文件,点击 Run  android开发手记一 ,在弹出框选择android application,这时eclipse便会自动在手机上安装该应用,然后启动

  1. 运行在虚拟机上

首先需要创建个Android Virtual Device。在eclipse中点击Android Virtual Device Manager ,点击New,输入虚拟机名称,目标平台,SD卡大小,和皮肤(默认是HVGA),

  1. 构建简单的UI界面

Android的UI是通过使用一系列View和ViewGroup对象。View对象组件通常是一些buttons,text fields之类的组件,而ViewGroup对象是View的容器,用于定义组件如何显示。

在android中,是通过XML来定义组件的层级架构。

(1)       在res/layout/以XML Viewer打开activity_main.xml

样式如下

 android开发手记一

首先删除TextView元素,并将<RelativeLayout>改成<LinearLayout>,并添加android:orientation属性,设置其值为"horizontal",效果应该如下

 android开发手记一

LinearLayout是一个ViewGroup子类,按照orientation属性来显示child views,LinearLayout的元素按在XML中的顺序依次显示。

因为LinearLayout是根View,所以它的width和height应显示全屏,所以是match_parent。

(2)       添加text field

在LinearLayout内添加个Text Field,内容如下

 android开发手记一

其中属性android: id可以独一无二的标记该EditText View

当你试图在XML中引用任何resource对象,就需要使用At符号@,随后是resource类型(这里是id),反斜杠,再是resource名称(这里就相当于定义了一个变量edit_message,该变量指向一个resource文件(此时还未指向到哪个resource文件),以后要想使用该resource,就可以直接调用该变量)

当你第一次定义一个resource id(这里是edit_message),需要在resource类型前加加号+符号,编译时SDK工具便会在gen/R.java中创建一个resource id(效果如下,相当于id.edit_message变量

public static final class id {

          public static final int edit_message=0x7f080000;

}

)指向该EditText元素。

一旦定义后,指向该引用的就不需要再使用加号符号

android:layout_width和android:layout_height中的wrap_content指定它应该和View的内容大小保持一致,如果用match_parent,则EditText元素会全屏。

android:hint用于当text field为空时默认应该显示的内容,这里不使用硬编码,而是@string/edit_message指向一个resource文件,因为还没有定义edit_message指向的resource,所以这里会有错误。

如果这里添个加号,换成@+string/edit_message, 则会在R.java中string类会增加一个edit_message变量,相当于string.edit_message。

(3)       添加string resource

当需要在用户UI中显示内容,应该将该内容串申明为一个resource

默认的这些string resource在res/values/strings.xml,添加一个edit_message变量,并设置为“Enter a Message”,同时再添加个button_send变量,值为“Send”,结果如下

 android开发手记一

此时上面的错误消失

(4)       添加一个Button

在activity_main.xml中添加Button控件,如下

 android开发手记一

这里不需要android:id因为下面activity将不引用,layout_width和layout_height设置为wrap_content,所以这个按钮将只有刚好能完全显示text内容的大小。这样设置完以后,效果就会如下图

 android开发手记一

这里有个问题,就是Send按钮宽度不变,但EditText如果用户输入增多它应该变长,所以需要android:layout_weight来设置,这个属性默认都是0,它可以设置为任意大于0的值,它代表的这个控件与其兄弟元素的比例,比如说现在EditText设置为1,Send设置为2,则EditText宽度就是1/3,而Send就是2/3。

将EditText修改如下

 android开发手记一

这样EditText控件显示宽度就是1/1,而Send则是最小宽度,这里讲layout_width修改为0dp是为了提高效率,wrap_content是需要系统来计算组件的宽度,这样现在的效果就会如下

 android开发手记一

(5)       连上手机,在eclipse点击 启动即可。

  1. 启动另一个活动

本节将在用户点击Send按钮启动一个新的活动。

打开activity_main.xml布局文件,在Button按钮添加android:onClick属性,设置android:onClick="sendMessage",其中sendMessage就是当用户点击Send时系统调用的方法。

接下来在src/MainActivity.java中添加该方法,如下

 android开发手记一

需要导入View类,eclipse中可以使用ctrl+shift+O快捷键导入。

为了能正确被引用,该方法必须是:

1)  必须是public

2)  需要return a void value

3)  有个View类作为唯一参数(这个View就是被点击的view)

接下来构建一个Intent

An Intent is an object that provides runtime binding between separate components (such as two activities).

Intent表示“intent to do something”,通常用于启动另一个activity。

在sendMessage方法内,创建一个Intent类用于启动一个叫DisplayMessageActivity的服务,Intent intent = new Intent(this, DisplayMessageActivity.class);

构造函数有两个参数,Context类是第一个参数(这里this是因为这个Activity类是Context类的子类),第二个参数用于表示系统将该Intent传递给哪个组件(这里就是讲该Intent传递给DisplayMessageActivity.class)

此时因为DisplayMessageActivity还不存在,所以暂时会报错。,效果如下

 android开发手记一

Intent不仅可以启动另一个服务,还可以传递一些数据,在sendMessage方法内,我们将使用findViewById()来获取EditText元素并将其值添加到该Intent,如下

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);

 android开发手记一

Intent可以包含一组键-值对(key-value pairs)数据称为extras,putExtra()方法第一个参数是key,第二个参数是value。

为了让第二个参数请求extra数据,需要使用一个public常量作为该Intent的extra的key,所以在MainActivity类开始添加一句

public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";

一般都会使用app的package名字来做前缀来定义intent的extra中的key。

启动第二个活动

为了启动一个活动,使用startActivity()方法并传递你的Intent,系统便会响应该请求然后启动Intent指定的Activity,这样MainActivity.java整个就应该如下

 android开发手记一

下面创建DisplayMessageActivity类

Eclipse中点击New – Android Activity,选择Blank Activity,如下

 android开发手记一

点击Next,在下一页如下设置

 android开发手记一

点击Finish结束。

打开DisplayMessageActivity.java,可以发现已经存在onCreate()方法,onCreateOptionsMenu()方法,onOptionsItemSelected()方法。整个DisplayMessageActivity.java内容如下

 android开发手记一

 android开发手记一

这里由于ActionBar API只有在HONEYCOMB版本以上,所以在使用getActionBar()方法之前会检查下当前的系统版本

另外@SuppressLint("NewApi") tag to the onCreate() method to avoid lint errors.

所以Activity子类都必须实现onCreate()方法,当系统创建一个该Activity实例就会调用该方法,同时在该方法内必须使用setContentView()定义该活动布局。

添加标题(title string)

在strings.xml文件添加如下一句(该eclipse已自动添加,无需手动添加)

 android开发手记一

将该Activity添加到AndroidManifest.xml(同样eclipse中已自动添加,无需手动添加),如下

 android开发手记一

接收Intent

每个Activity都是由一个Intent激活,通过调研getIntent()方法可以得到Intent,所以需要在DisplayMessageActivity类中的onCreate()方法中添加如下

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

显示接收到的消息

为了显示消息,需要创建一个TextView,并通过setText()设置内容,然后通过setContentView()方法将TextView添加到该Activity布局的root view。这样,完整的onCreate()方法应该如下

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

    // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.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);
}

 android开发手记一

接下来点击运行启动,第一个Hello World的app到此为止

注:此时接上机器运行的时候,报错The connection to adb is down, and a severe error has occurred,这个错误主要是由于主要是由于adb没法正常运行起来;而adb没法运行起来,主要是其端口被占用了;常见的,可能的占用adb端口的,是你当前电脑上和手机相关的管理软件,比如豌豆荚,91等,所以解决办法是:强制关闭再运行eclipse(我的是在任务管理器中终止了tadb进程后就ok了)。