AndroidStudio学习笔记-第一个安卓程序
要带一个本科生做一部分跟安卓有点关系的项目,于是趁着机会学习一下编写安卓程序。
第一篇材料来自谷歌官方,传送门: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学习笔记-第一个安卓程序的更多相关文章
- 七天从零基础学习android(2)--第一个安卓程序
在环境配置的那一部分,已经把基础的环境配置好了,接下来应该实现第一个安卓程序,就是著名的hello world 先在avd里面新建一个虚拟机,并且启动它 然后该虚拟机器能够在eclipse上正常识别 ...
- Lua学习笔记4. coroutine协同程序和文件I/O、错误处理
Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...
- Linux进程线程学习笔记:运行新程序
Linux进程线程学习笔记:运行新程序 周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下 ...
- ActionBarSherlock学习笔记 第一篇——部署
ActionBarSherlock学习笔记 第一篇--部署 ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
- 微信小程序开发:学习笔记[7]——理解小程序的宿主环境
微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器
- Django学习笔记---第一天
Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...
- ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探
前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...
- 个人学习笔记:C语言程序结构
个人笔记:C语言程序 函数 语句 输入输出对象 标识符 关键字 函数 一个C语言源程序,是由一个或多个函数定义顺序组成的,其中必须有一个函数名为main的主函数.C语言源程序中的函数是指完成特定数据处 ...
随机推荐
- C++ Primer Plus 笔记记录
(一) /a 这个转移字符竟然能调用计算机的硬件 喇叭~~ 对于float c++只能保证6位有效数字 似乎 double是13位 cout.setf(ios_base::fixed, ios_bas ...
- javascript函数声明方式
javascript中函数的声明有三种方式: 最常见的函数声明: fun();//可以调用,因为这种声明方式会被浏览器优先加载. function fun() { alert("声明式的函数 ...
- 关于 Netty Channel 的 Autoread
Netty 4 的 Channel 多了一个 autoread 参数, 它的用处是在让 channel 在触发某些事件以后(例如 channelActive, channelReadComplete) ...
- discuz!安装遇到问题的解决方案
正常的安装步骤好多地方都有写过了,我安装的时候遇到问题百度翻了个遍也没有找到,现在问题已经解决了,发出了分享一下! 进入第三步创建数据库的时候提示:由于目标计算机积极拒绝,无法连接. 打开phpmya ...
- react 写的省市三级联动
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Ba ...
- Java 标识符、数据类型、运算符
一.标识符 1.组成 首字母(字母,下划线,﹩)+其余部分(数字,字母,下划线,﹩) 2.命名规范 ①由大小写字母.下划线.数字.﹩ ②数字不能开头 ③标识符长度没有限制 ④标识符不能是关键字和保留字 ...
- spring 多线程 注入 服务层 问题
在用多线程的时候,里面要用到Spring注入服务层,或者是逻辑层的时候,一般是注入不进去的.具体原因应该是线程启动时没有用到Spring实例不池.所以注入的变量值都为null. 详细:http://h ...
- 【转载】SQL Server 2008 r2 中 SQL语句中单引号转义
sql server有两个转义符. 默认情况下, 单引号'是字符串的边界符, 如果在字符串中包含单引号', 则必须使用两个单引号', 第1个单引号'就是转义符.
- Ceph剖析:线程池实现
线程池ThreadPool的实现符合生产者-消费者模型,这个模型解除生产者消费者间的耦合关系,生产者可以专注处理制造产品的逻辑而不用关心产品的消费,消费者亦然.当然,生产者消费者之间需要一个连接的纽带 ...
- 一个sendMessage
Message 1.判断是否同意协议.2.验证验证码是否正确.3.验证手机是否符合规则,符合规则就用message()发送短信,验证码的有效期以及使用的短信模板,在配置文件中进行管理.返回值下标为st ...