Activity学习日记(一)
Activity学习日记(一)
- 学习目标
- android的发展历史,以及android和java的关系
- 掌握android开发环境搭建
- 创建第一个android apk
- android 工程结构分析
- android的调试方法的使用
- 学习内容
android的发展历史和特点:
特点
- 手机OS
- 嵌入式电子设备 广泛采用android系统 以前 wince ,qt
- google移动开发平台 竞争对手:IOS,WP 半封闭
- 最大特点:开源免费
- android开发环境搭建:
- 下载JDK---提供java代码编译和运行的环境
- 下载android SDK ---提供android应用程序所必须的开发包,文档,例子等等
- 下载 Eclipse IDE ---提供程序编写和编译的集成开发环境
- 下载 ADT Eclipse插件 ---提供android应用程序的必要工具,比如打包,数字验证等
- 为方便开发者集成了工具包 adt-bundle-windows-x86 开发工具包 2,3,4
- 版本
- 食物版本: API版本
- 1.x
- 2.x
- 3.x
- 4.x
- 5.0 (最新版本api22-- lollipop 棒棒糖)
- 建立一个helloworld
0,MiniMum Required SDK:最低支持的android api版本,低于这个版本的android手机不能安装你的应用
Target SDK:你的应用最高支持android api版本
Compile With:哪个版本的android SDK(1.5~4.2)编译你的工程,也就是最适合的,
最原生支持你的应用的android版本。
Theme :这个随意,主题选择
1,apk产生的过程
.java->.class->.dex->.apk
- 所有的资源文件,都会被aapt进行处理。解析的结果最后会被aapt通过一个R.java保存一个二进制树的索引,编程时可通过这个R.java文件进行XML的访问。
- 所有的Java文件,都会被JDK里的javac工具编译成bin目录下按源代码包结构组织的.class文件(.class是标准的Java可解析执行的格式),比如我们这个例子里生成的bin/classes/com/hello/*.class /*/文件。然后这些文件,会通过SDK里提供的一个dx工具转换成classes.dex文件。这一文件,就是会被Dalvik 虚拟机所解析执行的
- 最后我们得到的编译过的二进制资源文件和classes.dex可执行文件,会通过一个apkbuilder工具采用zip压缩算法打包到一个文件里,生成了我们所常见的.apk文件。
- 最后.apk文件,会通过jarsigner工具进行校验,这一校验值会需要一个数字签名。如果我们申请了Android开发者帐号,这一数字签名就是Android所分发的那个数字证书;如果没有,我们则使用debug模式,使用本地生成的一个随机的数字证书,这一文件位于~/.android/debug.keystore。
- 如何android设备运行程序
- ADT 模拟器
- 真实设备 装驱动
- apk文件包含了什么? 通过压缩包文件都可以看到??
AndroidManifest.xml 清单文件
classes.dex //代码的二进制,android虚拟机执行的不是*.class代码而是dex文件,由dx工具产生
resources.arsc//编译后的二进制资源文件
res
META-INF //数字签名信息
- 工程结构分析
- APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex即Android Dalvik执行程序
- src:源文件
- gen:ADT插件帮我们自动生成的文件,里面包括一个重要文件R.java
- android.jar:Java 归档文件,包含构建应用程序所需的所有的Android SDK 库(如Views、Controls)和APIs
- 有了这个,就可以import各种包和类了
- assets: 资源目录,放一些html,txt mp3、视频类文件等等
- res:放资源文件,比如图片,布局文件和字符串,菜单等文件
- drawable-x:包含一些你的应用程序可以用的图标文件(*.png、*.jpg)
- layout:布局文件,每一个activity都有对应的布局文件xml,控制这个activity各种控件的位置和大小
- values:软件上所需要显示的各种文字。可以存放多个*.xml文件,还可以存放不同类型的数据。
- 比如arrays.xml、colors.xml、dimens.xml、styles.xml string.xml, 键值对在R.java中会生成id
- Androidmanfest.xml:Android工程的系统清单文件,控制应用的图标,名称,访问权限等属性并配置四大组件
- default.properties:记录项目中所需要的环境信息,比如Android的版本等。
- libs:android-support-v4,保证来高版本sdk开发的向下兼容性
- R.java是根据res目录下的资源信息而自动创建的文件,Android程序开发过程中为你统一管理资源,添加ID、
- 有了这个文件,在代码中就可以访问各种资源
包括四个静态内部类,静态类的名字都与res中的一个名字对应,即R类定义该项目所有资源的索引
drawable:图片类,添加一张图片就产生一个类
layout:布局类,对应layout中的界面文件
string:字符串类
- xml文件--eXtensible Markup Language)即可扩展标记语言,很类似 HTML
一种简单的数据存储文档描述语言,语法简单,采用树形数据结构,语法更加严格从而保证数据的安全和唯一
XML 的设计宗旨是存储或传输数据,而非显示数据,html主要用于显示
1)封闭 xxx自定义
<xxx 属性1=值1 属性2=值2 ... />
2)开放
<xxx 属性1=值1 属性2=值2 ... >
<xxx 属性1=值1 属性2=值2 ... />
</xxx>
3)区分大小写
比如:
书
四大名著
三国
西游
红楼
水浒
xml的例子:
<book>
<four_books>
<sanguo category="Classic">
<title lang="en">Three Kingdoms </title>
<author>罗</author>
<year>985</year>
<price>30.00</price>
</sanguo>
<xiyou category="Classic">
<title lang="en"> One master And Three monster </title>
<author>施</author>
<year>500</year>
<price>35.00</price>
</xiyou>
</four_books>
</book>xml文件仅仅是纯文本而已,XML 被设计用来结构化、存储以及传输信息,XML 不会做任何事情
<?xml version="1.0" encoding="utf-8"?> <!-- 第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 -->
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
上面的这条便签具有自我描述性。它拥有标题以及留言,同时包含了发送者和接受者的信息。
但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息,这些信息必须由程序员按照
一定的方式进行解析
- android工程中主要的xml文件:
androidmanifest.xml 清单文件 告诉系统我有哪些东西,可以参考Android SDK文档中解释
<!-- 必须包含一个<application>元素并且指定xlmns:android和package属性 -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<!-- xlmns:android指定了Android的命名空间 -->
package="com.test" //包名,也是一个应用进程的默认名称,一般会以应用的域名来作为包名
android:versionCode="1" //给设备程序识别版本用的,必须是一个整数值代表app更新过多少次
android:versionName="1.0" > //给用户查看版本用的,需要具备一定的可读性,比如“1.0.0”这样的<uses-sdk android:minSdkVersion="9" /> //指定Android应用中所需要使用的SDK的版本,最小能够运行的api版本
<application //应用配置的根标记,位于<manifest>下层 容器:放android程序组件 四大组件
android:icon="@drawable/ic_launcher" //应用图标
android:label="@string/app_name" > //应用名,安装后在系统中的名字
<activity //代表定义的Activity的子类
android:name=".MyhelloActivity" //类名
android:label="@string/app_name" > //窗口的标题android:theme="@style/AppTheme" >
//主题 若改成:android:theme="@android:style/Theme.Dialog" 就会变成对话框形式的activity<intent-filter> //过滤器,该程序组件能干什么
<action android:name="android.intent.action.MAIN" /> //应用启动的入口,多个activity存在时先启动该activity<category android:name="android.intent.category.LAUNCHER" /> //表示该程序可以显示在桌面上
</intent-filter>
</activity>
</application></manifest>
============================================================================
layout_hello.xml:
<TextView
android:id="@+id/textView1" //给这个控件设置一个id号码,在代码中就可以找到
//自动的在R.java中产生一个id号码
// class R{ class id{ textView1 =0x70e0e0e0e } }
//在代码中就可以直接找到该控件
// R.id.textView1
android:layout_width="wrap_content" // 该控件的宽度, 控件的大小是随着内容变化的
android:layout_height="wrap_content" // 该控件的高度
android:text="@string/hello_world" /> //该控件的显示内容
values/strings.xml
<resources>
<string name="test">好奇纸尿裤</string>
</resources>
在其他的地方去使用:
1,另外的xml文件中会使用:
布局xml:
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/test" /> //在这个地方引用
2,在代码中用到:在Activity子类中采用调用
String str = getResources().getString(R.string.test);values/dimens.xml: 表示大小尺寸的资源
<dimen name="mySize">32dp</dimen>
在其他的地方:
1,另外的xml文件中会使用:
布局xml:
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/mySize"
android:text="@string/test" />
values/styles.xml
<style name="myStyle">
<item name="android:textColor">#22ff22</item>
<item name="android:textSize">32dp</item>
</style>
使用:
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/myStyle"
android:text="@string/test" />
menu/hello.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/><item
android:id="@+id/item2"
android:title="@string/test"/>
</menu>
在Android中打印调试信息:
1, java中System.out
2, Log函数
private final String TAG = "HelloActivity";
Log.i(TAG, "str = " + str);
========================================================================
- 如果Activity要操作UI组件对象?
MVC模式
1.UI 交给main.xml完成
2.业务逻辑 交给activity子类重写onCreate()
3.程序组件有哪些交清单
MVC架构起始于一個GUI(graphical user interface designpatter,图型用户界面设计原型)原型,其目的是
实现动态程序设计,使日后对于程序修改及扩展更加便利,并使某些程序代码可重复利用。另外通过对复杂度的
简化,使程序结构更加直观。
软件系统通过对自身基本部份分离的同时也给予各部分应有的功能,如同一所大公司一样,将工作区分做到专业化,
专业人员可以通过自身的专长分组:
View -视图层能够实现数据有目的的显示,视图需要访问它监视的数据模型(Model)
美工或UI设计人员可以独立进行图形接口设计及美化。
Model -数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法
模型不关心它会被如何显示或是如何被操作,比如数据库专家进行数据管理和数据库的实现算法
Controller -控制器起到不同层面间的组织作用,用于控制应用程序并与响应处理用户的交互在Android中,程序设计师利用Java撰写程序逻辑及架构,
美工设计则使用xml来撰写用户界面,
数据库人员则针对SQL数据库进行设计及优化。
------------------------------------------------------------------------------------------------------------
资源文件的简单使用:
res:
strings.xml: 一:是为了国际化 二:为了减少应用的体积,降低数据的冗余
定义字符串
<string name="hello_world">Hello world!</string>
获取对应的值:
1, 在Activity中使用
String appName=(String) this.getResources().getString(R.string.hello_world);
2,在其他xml中,比如布局文件
android:text="@string/hello_world"
arrays.xml定义数组
定义:
<!--通用的array-->
<array name="common">
<item>@drawable/ic_launcher</item>
<item>@drawable/ic_launcher</item>
<item>@drawable/ic_launcher</item>
<item>@drawable/ic_launcher</item>
<item>@drawable/ic_launcher</item>
</array>
<string-array name="countries">
<item >中国</item>
<item >美国</item>
</string-array>
获取:
java代码:
---------------------------------------------------------------------------------------------------------------
adb和ddms的使用, E:\adt-bundle-windows-x86-20130522\sdk\platform-tools放进环境变量
adb:
adb device 显示当前有效的avd或是真实机器
adb push上传文件至SD卡
adb push 001.jpg /sdcard(复制文件到/sdcard目录下)
adb push pictures /sdcard(复制pictures目录到/sdcard目录下)
adb shell (进入命令行模式)
#cd /sdcard(进入/sdcard目录)
#ls (列出SD卡中的文件)
#logcat ( 查看所有调试信息,两条命令可以换成一个命令:adb shell(dos中使用)
adb pull /sdcard/001.jpg .(下载/sdcard的文件到PC)adb install filename.apk(安裝filename.apk)
adb install-r filename.apk(保留已设定数据,重新安裝filename.apk)
adb uninstall package (移除 APK)
adb uninstall -k package(移除程序时,保留数据)
注意package名称不是安装APK套件时的文件名,可以去/data/data或data/app目录查看
adb connect 127.0.0.1:62001
adb disconnect 127.0.0.1:62001
adb kill-server :杀死adbd服务
adb start-server:启动adbd服务
logcat的使用
DDMS调试环境:Dalvik Debug Monitor Service
设备面板:当前运行的模拟器,模拟器内的所有进程信息.
信息输出面板:类似java控制台
线程跟踪面板:
Heap内存跟踪面板
模拟器控制面板
文件管理面板
Android SDK包全览和查询方法
sdk/docs/reference
- 总结
1, 配置sdk
2,编写第一个Helloworld
3,创建avd
4,使用logcat查看调试信息和DDMS控制台
5,修改各种xml文件
package com.hq.hello;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//setContentView(R.layout.activity_test);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.hq.hello"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="19" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.hq.hello.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.hq.hello.MainActivity" ><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:textColor="@color/sandybrown"android:textSize="@dimen/btn_text_size"android:text="@string/btn_string" /><ListViewandroid:entries="@array/person"android:id="@+id/listView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/button2" ></ListView><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/listView1"android:layout_alignRight="@+id/listView1"android:layout_marginRight="79dp"android:text="妹"style="@style/mystyle" /></RelativeLayout>
Activity学习日记(一)相关推荐
- Activity学习日记(九)
目录 Handler的基本使用方法示例 listview基本使用 简单聊天程序客户端(java)[服务器可以找epoll服务器日志] SendBd_有序广播和无需广播_获取电池电量 serviceTe ...
- android学习日记 RecyclerView的简单使用
android学习日记 RecyclerView的简单使用 文章目录 android学习日记 RecyclerView的简单使用 一.如何使用RecyclerView? 二.使用步骤 1.首先在bui ...
- java的圆周率_java学习日记,圆周率的打印
前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...
- GPU(CUDA)学习日记(十三)------ CUDA内存简介
GPU(CUDA)学习日记(十三)------ CUDA内存简介 标签: cuda存储线程结构 2012-12-07 16:53 2902人阅读 评论(0)收藏 举报 分类: GPU(16) CUDA ...
- GPU(CUDA)学习日记(九)------ CUDA存储器模型
GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...
- 语言余一个负数_C语言学习日记(8)——整数溢出
小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...
- SpringMVC学习日记 1.Spring框架
SpringMVC学习日记 1.Spring框架 Spring简介 Spring框架是一个开源框架,由Rod Johnson组织和开发,生产目的在于简化企业级应用的开发. 主要特性 非侵入(no-in ...
- 微信开发学习日记(一):快速阅读5本书,掌握整体背景
2015年1月开始学习微信开发. 已经有多年开发经验了,从网上文章来看,微信开发主要是接口,然后是业务逻辑,不是很难.所以,我比较强调学习效率.一天学一点,是不能满足我的快速学习欲望的. ...
最新文章
- mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优
- [Python]架设python虚拟环境以及部署PythonWeb服务
- jQ 插件 iscroll.js
- GitHub 为什么有些时候进去特变慢
- centos7 网卡配置vlan_Centos7安装后的一些基础配置
- Kafka坑 - Couldn't find leaders for Set(kafka重启)
- 8bit黑白图像的灰度值范围是_数字图像处理基本知识
- ssm java上传图片预览_ssm文件上传_上传图片
- 【系统】windows2003 至少有一个服务或驱动程序无法加载或错误
- 列表ls按照升序排列的python内置函数是_Python习题集
- mysql做报表分析_mysqlreport解析
- Session一次错误记录
- 2021年度图学会第十七期全国BIM等级考试一级真题
- js 获取浏览器经纬度精确到100米(chrome,firefox等大浏览器,ios,安卓亲测可用)
- 光遇挂_创作者与一束光的七年之约:陈星汉的Sky光遇详解
- 抖音常见的违规封号行为;怎么避免抖音违规;丨国仁网络资讯
- Error response from daemon: pull access denied for registey, repository does not exist or may requir
- BUAA_数据结构_2nd_小型图书管理系统
- python爬取历年高考分数线——预测2018年高考分数线
- 关于向S3服务器上传中文名称文件失败的处理办法