要带一个本科生做一部分跟安卓有点关系的项目,于是趁着机会学习一下编写安卓程序。

第一篇材料来自谷歌官方,传送门:https://developer.android.com/training/basics/firstapp/index.html。由于官方例程写的很清楚了,基本上只要按着步骤就好了,所以不打算完全的复制粘贴,主要实践过程中我的一些理解和思考。

1. 创建新工程

一个安卓程序的层次结构为 Application -> many activities (可以理解为很多个界面) -> layout + title + menu

新建工程后AS会自动生成许多文件,重要的文件包括:

  1. app/src/main/res/layout/activity_my.xml 格式为XML的layout文件。AS支持直接通过text来修改显示界面,同时也提供了GUI,可以直接拖拽完成界面编辑。

  2. app/src/main/res/layout/content_my.xml 该文件被activity_my.xml调用。对layout的具体描述以及一些设置等。

  3. app/src/main/java/com.mycompany.myfirstapp/MyActivity.java jave核心代码,包括实际的activity的类及其类函数。当app运行时,该activity类运行并调用前述layout文件显示出来。

  4. app/src/main/AndroidManifest.xml app的基础特性的配置及包括哪些组成部分(activity)

  5. app/build.gradle gradle脚本用来编译和构建app,方便处理版本及依赖库等问题。

  6. app/src/main/res/ 改目录下包括app中所用到的所有资源:

    drawable-<density>/ 包括所有图片资源,除了启动图标

    layout 包括每个activity的layout文件

    menu 包括activity的menu文件

    mipmap 包括启动图标

    values 其他的xml文件,包括string和color的定义等。

2. 运行程序

程序既可以在具体的安卓设备上运行,也可以在模拟器上运行。

在具体的安卓设备调试之前,需要安装好设备的相关驱动,编译程序的时候要选择符合的版本号,不用怎么麻烦就可以运行hello world了!

3. 创建简单的用户界面

安卓app的图形界面的层次结构为 ViewGroup -> View. ViewGroup是不可见的容器,定义了其子view如何布局,布局是ViewGroup的子类。View对象是普通的UI部件。

  1. 新建一个linear layout

  2. 增加Text域和button

<EditText android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/edit_message" />

    View的ID用来读取和操作对应的View对象

    View的hint为输入Text为空的时候的提示语句

  3. 增加String资源

    在res/values/strings.xml中增加名为edit_message和button_send的string

  4. 让输入框充满屏幕

给UI部件增加响应函数  

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />

增加onClick响应,sendMessage为该activity的类函数

在MyActivity.javaMyActivity类中增加对应类函数,该类函数需要是Public的,Void的返回值以及只有View一个参数

在类函数中创建一个Intent用来打开新的activity

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

  intent能够携带类型为字典的变量extras,通过调用putExtra能够给字典赋值

在MyActivity中补充定义Extra_MESSAGE

public class MyActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE";
...
}

4.创建另外一个Activity

  使用 AS创建另外一个blank Activity,编辑其java核心代码

  接收intent

    Intent intent = getIntent();

    String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

  在Activity中创建新的textView    

    TextView textView = new TextView(this);

    textView.setTextSize(40);

    textView.setText(message);

  在Activity中在布局中添加textView

    RelativeLayout layout = (RelativeLayout) findViewById(R.id.content);

    layout.addView(textView);

恭喜,完成基本的教程!

AndroidStudio学习笔记-第一个安卓程序的更多相关文章

  1. 七天从零基础学习android(2)--第一个安卓程序

    在环境配置的那一部分,已经把基础的环境配置好了,接下来应该实现第一个安卓程序,就是著名的hello world 先在avd里面新建一个虚拟机,并且启动它 然后该虚拟机器能够在eclipse上正常识别 ...

  2. Lua学习笔记4. coroutine协同程序和文件I/O、错误处理

    Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...

  3. Linux进程线程学习笔记:运行新程序

    Linux进程线程学习笔记:运行新程序                                         周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下 ...

  4. ActionBarSherlock学习笔记 第一篇——部署

    ActionBarSherlock学习笔记 第一篇--部署          ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...

  5. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  6. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  7. Django学习笔记---第一天

    Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...

  8. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  9. 个人学习笔记:C语言程序结构

    个人笔记:C语言程序 函数 语句 输入输出对象 标识符 关键字 函数 一个C语言源程序,是由一个或多个函数定义顺序组成的,其中必须有一个函数名为main的主函数.C语言源程序中的函数是指完成特定数据处 ...

随机推荐

  1. C#中线程对控件的访问

    Control类提供了一个Invoke方法来给子线程访问主线程的控件,它的原型是酱紫的: object.Control.Invoke(Delegate method); object.Control. ...

  2. UItextFiled只能输入数字

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...

  3. HibernateTemplate的一些常用方法总结

    1:get/load存取单条数据 public Teacher getTeacherById(Long id) { return (Teacher)this.hibernateTemplate.get ...

  4. NC 单据保存时间过长,判断数据库锁表解决办法

    SELECT s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.o ...

  5. My安卓知识2--使用listview绑定sqlite中的数据

    我想在我的安卓项目中实现一个这样的功能,读取sqlite数据库中的数据并显示到某个页面的listview控件中. 首先,我建立了一个Service类,来实现对数据库的各种操作,然后在这个类中添加对数据 ...

  6. Markdown: 用写代码的思维写文档

    作者:吴香伟 发表于 2014/08/07 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 本文不讲解Markdown的语法规则,只关注它带来的好处以及我使用的方 ...

  7. HTML5之tabindex属性

    1 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&g ...

  8. 史上最强大网盘,网络上的赚钱神器【Yunfile网盘】,注册就送8元

    YunFile.com,是提供在线存储和文件保存服务最大的网站之一,从2007年创立至今,我们提供免费的和您可以承受的收费服务.这些服务包括高级在线存储/远程备份服务,和先进的上传和下载工具.上百万来 ...

  9. jquery easyui window中的datagrid,只能显示一次问题

    最近项目中用到easyui 的动态创建window ,window中嵌入了datagruid.第一次打开是能显示数据,但再次打开时确没显示: 注:url已成功返回了数据. 多次查阅easyui帮助文档 ...

  10. IOS调用WCF服务,WCF服务器进行上传图片

    1.IOS端采用post方式请求服务器端的url地址 如:http://192.168.0.12:50000/serverce1.svc/upload IOS端的代码采用base64位编码的方式传值给 ...