Android高级编程笔记
- 格式:pptx
- 大小:14.66 MB
- 文档页数:132
start是用来让动画从开头开始播放的。
如果动画设置了一个大于0的播放延迟(startDelay),那么调用该方法后还需要等到延迟的时间过去才回开始播放。
停止动画:end方法或cancel方法来停止一个播放着的动画。
在两种方式中动画都会终止并且只有再次调用start方法才会重新开始播放。
两者的区别则在于停止后动画所在的状态,1)cancel方法来停止动画后,动画只是停止了它的时间轴,动画的状态会停在一个中间态(intermediate state)。
2)end 方法来停止一个动画,那么动画会直接快进到该动画最后一帧并且停止,所有的对象都会保持在动画最终结束后的状态。
在Kitkat 中增加的没有怎么被大家关注到的新API则是带来了动画可以暂停和恢复的能力。
在那之前,一个动画如果被取消并且停留在当前的中间态,此时你用start 方法去重启动画,动画只会从一开始重新播放。
现在,你则可以调用pause方法来暂停当前播放中的动画,pause也会有和cancel 方法一样的功效让动画停留在中间态,但是当你使用resume 方法去恢复这个动画的时候,动画会从这个状态继续播放下去。
这个方法顾名思义是用来让动画从开头开始播放的。
如果动画设置了一个大于0的播放延迟(startDelay),那么调用该方法后还需要等到延迟的时间过去才回开始播放。
我们有两种停止动画的方法,你可以用end方法抑或cancel方法来停止一个播放着的动画。
在两种方式中动画都会终止并且只有再次调用start方法才会重新开始播放。
两者的区别则在于停止后动画所在的状态,当你使用cancel方法来停止动画后,动画只是停止了它的时间轴,动画的状态会停在一个中间态(intermediatestate)。
如果通过end 方法来停止一个动画,那么动画会直接快进到该动画最后一帧并且停止,所有的对象都会保持在动画最终结束后的状态。
在Kitkat 中增加的没有怎么被大家关注到的新API则是带来了动画可以暂停和恢复的能力。
Android开发学习笔记by---- 三爷一、新建项目Application Name: 应用程序名,即该应用的名称,日后在安卓市场上将显示该App名称,与项目无关。
Project Name:项目中的工程名(项目中的App名),注意,在项目中将使用该名称,该工程将被存放在下面命名的包下,命名时要注意规范。
Package Name:包名,格式为“com.自定义的包名.工程名”,其中包名自定义,但包名后的工程名必须和上面的Project Name一至。
Build SDK:选择android SDK的版本,建议选择1.6版本兼容范围广一点Minimum Required SDK:该程序兼容的最低SDK版本,这里选择的版本必须跟上面选择的Build SDK版本一致。
Activity Name:第一个Activity的名称,随意命名,它将是程序的入口Layout Name:为第一个Activity布局的xml文件名称,随意命名,建议与其对应的activity 名称有一定的关联性。
Title:上面设置的Activity的标题(这个在程序里都可以改)二、项目文件夹说明com.PackageName.ProjectName:该项目的文件夹,里面存放我们编写的源文件gen:由ADT自动生成,其中包含有一个R.java的文件是用于声明res文件夹下的资源的句柄,程序将通过该文件来引用项目中的资源,该文件不要随意改动,。
Android 1.6:这里面是android的SDK包,程序中所有引用android的类都是从这个包里引用;这里的1.6为新建项目时选择的sdk版本号,这里的版本号会根据你新建项目时选择的版本号不同而不同。
bin:这个目录存放编译生成的android安装文件assets:存放项目的资源,比如视频、音频、图片等较大的资源,注意该目录下的资源不会被生成句柄,所以只能通过路径来引用。
res:存放项目的资源,比如图标、图片、音频等,该目录下的资源会被R.java文件自动生成句柄以方便程序引用。
Android 开发简介简介黑莓和iPhone 都提供了受欢迎的、高容量的移动平台,但是却分别针对两个不同的消费群体。
黑莓是企业业务用户的不二选择。
但是,作为一种消费设备,它在易用性和“新奇特性”方面难以和iPhone 抗衡。
Android 则是一个年轻的、有待开发的平台,它有潜力同时涵盖移动电话的两个不同消费群体,甚至可能缩小工作和娱乐之间的差别如今,很多基于网络或有网络支持的设备都运行某种Linux 内核。
这是一种可靠的平台:可经济有效地进行部署和提供支持,并且可直接作为面向部署的良好的设计方法。
这些设备的UI 通常是基于HTML 的,可通过PC 或Mac 浏览器查看。
但并不是每个设备都需要通过一个常规的计算设备来控制。
想象一下传统的家用电器,例如电炉、微波炉或面包机。
如果您的家用电器由Android 控制,并且有一个彩色触摸屏,会怎么样?如果电炉上有一个Android UI,那么操控者甚至可以烹饪点什么东西。
在本文中,了解Android 平台,以及如何将它用于移动和非移动应用程序。
安装Android SDK,并构建一个简单的应用程序。
Android 简史Android 平台是Open Handset Alliance 的成果,Open Handset Alliance 组织由一群共同致力于构建更好的移动电话的公司组成。
这个组织由Google 领导,包括移动运营商、手持设备制造商、零部件制造商、软件解决方案和平台提供商以及市场营销公司。
从软件开发的观点看,Android 正处在开源领域的中心位置。
市场上第一款支持Android 的手机是由HTC 制造并由T-Mobile 供应的G1。
这款设备从设想到推出花了大约一年的时间,惟一可用的软件开发工具是一些实行增量改进的SDK 发行版。
随着G1 发行日的临近,Android 团队发布了SDK V1.0,用于这个新平台的应用程序也浮出水面。
为了鼓励创新,Google 举办了两届“Android Developer Challenges”,为优胜的参赛作品提供数百万美金的奖励。
Android学习笔记Android学习笔记-常用的一些源码,防止忘记了。
1.长点击控件菜单,即我们常说的右键菜单,不过好像ContextMenu不支持ICON的,所以即使在源码里面可以使用setIcon函数,但是还是不会有效果的。
一般有下面三个步骤:// 通常在onCreate函数中注册一个控件,btn为需要弹出ContextMenu的控件this.registerForContextMenu(btn);///////////////////////////////////////////////////////////////////////////////// 下面函数是创建ContextMenu的,v是被点击的控件// 根据v进行判断可以对不同的控件,创建不同的ContextMenupublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)///////////////////////////////////////////////////////////////////////////////// 下面函数是响应ContextMenu点击事情的。
public boolean onContextItemSelected(MenuItem item)2. Toast显示信息,可以方便的来输出信息Toast.makeText(this, "Info", Toast.LENGTH_LONG).show();3. 关于MENU的操作有两个比较重要的了,函数原型:public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title);public abstract SubMenu addSubMenu (CharSequence title);一般的函数有:menu.setHeaderTitle("MenuTitle");menu.setHeaderIcon(R.drawable.icon);menu.add(0, 0, 0, "item0").setIcon(R.drawable.icon);menu.add(0, 1, 1, "item1");/////////////////////////////////////////////////////////////////////////////// SubMenu sub = menu.addSubMenu("SubMenu");sub.add(0, 5, 5, "item5");sub.add(0, 6, 6, "item6");4.获取屏幕的分辨率isplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); dm.widthPixelsdm.heightPixels5.显示POPUP对话框,类似于Windows的MessageBox函数,不过这个要比MessageBox强大多了,,,可以设置单选或者多选项,以及其响应,有两种方法可以一:实现Activity的onCreateDialog函数。
Android学习笔记(by quqi99 MSN: quqi99@)Android platform是一个用于开发移动程序的软件包,它包括了操作系统、中间件及一些关键应用。
开发者能使用android SDK为Android platform开发应用,这些应用使用JA VA语言书写,运行在虚拟机Dalvik(一个专为手机程序开发的基于linux内核的JA VA虚拟机)。
1 什么是Android1.1 Android的特性✓应用框架,让一些基础设施得以重用✓Dalvik虚拟机,专为开发移动程序优化✓集成的浏览器,(基于WebKit引擎)✓优化的图形库,(2D图形库以及基于OpenGL ES 1.0规范的3D图形库)✓SQLite,用于结构化数据的存储,是一个数据库✓多媒体支持,支持多种音频,视频格式(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)✓GSM技术(依赖具体硬件)✓Bluetooth, EDGE, 3G, WiFi(依赖具体硬件)✓Camera, GPS, compass, accelerometer(依赖具体硬件)✓丰富的开发环境(DEBUG工具,内存及性能工具,Eclipse的插件等)1.2 Android的架构Android操作系统的模块如下:应用:Android已集成了一些应用,如邮件客户端,SMS程序,日历,地图,浏览器等应用框架:程序库:例行程序Linux内核2 Andvoid起步2.1 开发环境配置使用Eclipse + Android Development Tools (ADT)插件。
在Help> Software Updates> Find and Install....中键入更新地址:https:///android/eclipse/2.2 运行第一个Andvoid程序使用Eclipse插件1、建立的工程类型为:Andvoid Project2、建立Launch Configuration. Run > Open Run Dialog... or Run > Open Debug Dialog命令行运行程序1、创建工程activityCreator .ActivityName2、编译。
第四章管理Android系统桌面第一节管理壁纸初识Android壁纸在Android中,壁纸分为静态与动态两种。
静态壁纸是一张图片,而动态壁纸则以动画为表现形式,或者可以对用户的操作作出反应。
这两种形式看似差异很大,其实二者的本质是统一的。
它们都以一个Service的形式运行在系统后台,并在一个类型为TYPE_WALLPAPER 的窗口上绘制内容。
➢Android壁纸的实现与管理分为三个层次:⏹WallpaperService与Engine。
同SystemUI一样,壁纸运行在一个Android服务之中,这个服务的名字叫做WallpaperService。
当用户选择了一个壁纸之后,此壁纸所对应的WallpaperService便会启动并开始进行壁纸的绘制工作,因此继承并定制WallpaperService是开发者进行壁纸开发的第一步。
Engine是WallpaperService中的一个内部类,实现了壁纸窗口的创建以及Surface的维护工作。
另外,Engine提供了可供子类重写的一系列回调,用于通知壁纸开发者关于壁纸的生命周期、Surface状态的变化以及对用户的输入事件进行响应。
可以说,Engine类是壁纸实现的核心所在。
壁纸开发者需要继承Engine类,并重写其提供的回调以完成壁纸的开发。
这一层次的内容主要体现了壁纸的实现原理。
⏹WallpaperManagerService,这个系统服务用于管理壁纸的运行与切换,并通过WallpaperManager类向外界提供操作壁纸的接口。
当通过WallpaperManagaer的接口进行壁纸的切换时,WallpaperManagerService会取消当前壁纸的WallpaperService的绑定,并启动新壁纸的WallpaperService。
另外,Engine类进行窗口创建时所使用的窗口令牌也是由WallpaperManagerService提供的。
@、创建Activity的要点1、一个Activity是一个类,并且这个类要继承Activity2、需要复写onCreate()方法3、每一个Activity都需要在AndroidManifest.xml文件中进行配置,如果一个Activity配置了<intent-filter />的MAIN属性,则这个Activity就是启动时默认执行的Activity4、为Activity添加必要的控件Activity可以理解为与用户交互的接口,以及控件的容器@、Intent1、一个Intent对象包含了一组信息:a、Component name 组件名,如另一个Activityb、Action 动作:如newIntent(Intent.ACTION_SENDTO,uri) 中的Intent.ACTION_SENDTO 指发短信的服务c、Data 传送的数据,如上面的Uri uri =Uri.parse(“smsto://77677888”);d、Categorye、Extras 额外的信息,是类似map的键值对f、Flags@、Menu控件的添加方法:需要覆写Activity的onCreateOptionsMenu(Menu menu){ }方法。
该方法其实是一个回调方法。
在方法内部操作传入的menu就Ok例:public boolean onCreagteOptionsMenu(Menu menu){menu.add(0,1,1,R.string.exit);menu.add(0,2,2,R.string.about);return super.onCreateOptionsMenu(menu);} //该函数产生菜单界面监听菜单的事件,当点击菜单按钮时,会调用该函数,传入该菜单项的引用public Boolean onOptionsItemSeleted(MenuItem item){if(item.getItemId() ==1){//item是添加时add方法的第二个参数finish();//退出}}1、android的可执行文件 .dex;android上的安装文件 .apk;android 使用了自己的dalvik而不是sun的JVM,JVM是基于栈,而dalvik 是基于寄存器。
第三章基本控件1、基本控件2、组件的添加到布局中有两种方式:在代码中编写、在布局文件中布局。
3、Button 相应点击事件在代码里注册View.OnClickListener监听器XML设置android:onClick第四章使用容器1、常用的布局:LearLayout\RelativeLayout\TableLayout\FrameLayout\ScrollView LinearLayout中的所有部件都必须指定android:layout_width和android:layout_height特性,值可以是实际像素,可以是"wrap_content"(即包含内容),"fill_parent"(即填充父元素)。
第五章使用选择部件1、Android 的适配器负责为选择部件提供数据源,也负责将单独的数据元素转换为显示在选择部件中的特定视图2、ArrayAdapter接受3个参数要使用的上下文(通常就是当前的activity的实例)要使用的视图的资源ID要实际显示的选项数组或列表3、ListView调用setAdapter()以提供数据和子视图。
通过添加一个侦听器,以便在选项变化时作出反应。
setOnItemSelectedListener()、setOnItemClickListener()你想自定义布局,只要将ListView标识为@android:id/listlistview只能响应单击列表选项的操作。
多选必须设置setchoicemode();4、GridView可以为我们提供一个可供选择的二维选项网格。
5、AutoCompleteTextView看成是EditText和Spinner的组合。
AutoCompleteTextView是EditText的子类。
Android:completeThreshold:表示在触发列表筛选功能之前,用户必须输入的最少字符数目AutoCompleteTextView不支持选择侦听器,我们可以注册一个TextWatcher,从而在文本变化时,也可以收到通知。
Android学习笔记今天记录一下这段时期学习Android的笔记,这些笔记比较凌乱,但总归是有用的,以后什么时候有用,可以直接查询来使用。
通过命令操作contentprovideradb shell content insert --uri 的使用在命令行下输入adb shell content会提示相关的使用说明ubuntu sqlite3可视化sudo apt-get install sqlite3sqlite3 -versionsudo apt-get install sqlitebrowsersqlitebrowser查看某一条提交记录git show 9bc2f472e9cf204c737025b5d7101ba16c43b356git log --pretty=oneline ./src/com/android/providers/settings/SettingsBackupAgent.javagoogle浏览器下载安装sudo apt-get install chromium-browser chromium-browser-l10n查询修改Settings数据库中的字段值adb shell settings get namespace keyadb shell settings put namespace key valueadb shell settings delete namespace keyadb shell settings list namespaceandroid studio原码导入mmm development/tools/idegen/development/tools/idegen/idegen.sh反编译遇到的问题apktool.jar下载https:///iBotPeaches/apktool/downloads将apktool和apktool.jar放置到usr/local/bin目录下,并且设置其为可执行文件sudo chmod +x apktoolsudo chmod +x apktool.jarapktool d xxx.apk反编译的时候可能会出现这样的错误:com.googlecode.dex2jar.DexException这是因为当前是odex文件,需要执行下面的操作:java -jar baksmali-2.0.3.jar -d system/framework -x xxx.odex-d 参数就是指定到那个目录下寻找那些所需的jar文件,如果所需的jar包就在当前目录,那么就不需要指定该目录了。
ANDROID快速开发笔记Android快速开发11.每创建一个activity,都要继承Activity,复写onCreate方法,并且要在manifest中进行注册;注意:复习onCreate后,马上在super.onCreate()下面加上setContentView(yout.xml),指定当前class的布局文件,否则会报错;yout下的xml是布局文件,com下的class文件是程序文件,string中存放所有文字类对象等等;3.使用控件,先要在布局文件的xml中声明,设定控件id用android:id=”@+id/ID”。
然后在class程序文件中调用控件,首先声明控件,然后荣格findViewById的方法。
例如:TextView textview = (TextView)findViewById(ID);4.给上面的textview赋值,textview.getText(“”);可以直接写值,也可以使用R.string的形式调用声明的字符串。
5.使用Intent进行activity切换(在class中编写)【向另外的activity中传值】1)创建内部类Class myButtonListener implemtes onClickListener(view){Intent intent = new Intent();【Intent.putExtra(“名称”,值); 】Intent.setClass(当前activity.this,目标activity.class);当前activity.this.startActivity(intent);}2)将监听器绑定到按钮上myButton.setOnClickListener(new myButtonListener());6.在另外的activity接收上一个activity传递过来的值String 变量= intent.getStrngExtra(上一个activity传过来的名称);7.获得当前act上用户输入的内容(取得editText控件中用户输入内容)1)先同findById的方法得到取值控件;2)String 变量= 控件.getText().toString();8.编辑手机的MENU键功能1)先在class中复写onCreateOptionsMenu(Menu menu)方法;2)编辑方法中的内容,添加:menu.add(0,menuId,1,”关于”);menu.add(0,menuId,2,”退出”);3)复写onOptionsItemSelectet(MenuItem item)方法,为菜单加上操作;编辑判断:if(item.getItemId()==“menuId”){ 执行对应操作按钮的操作}Android快速开发2——单选框、复选框、吐司提示的使用1.同样作为控件,单选框、复选框的使用仍然遵循:1)在layout的xml中声明;2)在程序文件的class中通过findViewById获取;3)编辑并绑定适当的触发器;以上操作只针对单选框和复选框,吐司提示类似web的alert,不用另外声明。
1 7个生命周期函数多个activity以栈的形式存在压入和弹出2 悬浮窗口的设置androidmanifest.xml 中android:theme="@android:style/Theme.Dialog"第二个activity 完全遮挡第一个activity时,调用onStop第二个activity 不完全遮挡第一个activity时,调用onPause3 布局文件组件的权重android:layout_weight="1"指的是所占窗口的比例4 相对布局<RelativeLayout android:padding="10px"组件的属性android:layout_above="@id/xxx" 放在指定控件的某某方位android:layout_beloveandroid:layout_toLeftofandroid:layout_toRightofandroid:layout_alignLeft=“@id/xxx”与给定组件左边缘对齐5 常用组件单选按钮组RadioGroup RadioButton 给RadioGroup设置监听器.setOnCheckedChangedListener(newRadioGroup.OnCheckedChangeListener(){ });判断是否选中if (MaleBUtton.getId()==checkedId)多选框box.setOnCheckedChangedListener(new CompoundButton.OnCheckedChangeListener(){ });判断是否选中if(isChecked) 与单选按钮不同的是,为每个多选框都设置监听器6 Toast.makeText(对象名,字符串,Toast.LENGTH_SHORT);7 ProgressBar 水平进度条xml文件中属性设置为style="?android:attr/progressBarStyleHorizontal"firstBar.setProgress();firstBar.setSencondaryProgress();8 ListView android:scrollbars="vertical"垂直方向的滚动条ListActivity的派生类9 Handler①创建一个Handler对象,②将要执行的操作协助线程对象的run方法中10用Handler处理进度条11 按钮控制ProgressBarHandler对象的声明用法:从消息队列取消息,然后处理该消息(异步处理)得到参数之后用参数。
第二章OpenGL与3D开发第二节绘制2D图形OpenGL ES在Android中涉及的关键类Android框架中有两个基础类,可让我们使用OpenGL ES API创建和操作图形:GLSurfaceView 和GLSurfaceView.Renderer。
➢GLSurfaceViewGLSurfaceView从Android 1.5(API level 3)开始加入,继承自SurfaceView,实现了SurfaceHolder.Callback2接口,拥有SurfaceView的全部特性,也有view所有的功能和属性,特别是处理事件的能力,它主要是在SurfaceView的基础上它加入了EGL的管理,并自带了一个GLThread 绘制线程(EGLContext创建GL环境所在线程即为GL线程),绘制的工作直接通过OpenGL在绘制线程进行,不会阻塞主线程,绘制的结果输出到SurfaceView所提供的Surface上,这使得GLSurfaceView也拥有了OpenGL ES所提供的图形处理能力,通过它定义的Render接口,使更改具体的Render的行为非常灵活性,只需要将实现了渲染函数的Renderer的实现类设置给GLSurfaceView 即可。
➢GLSurfaceView.Renderer 接口GLSurfaceView.Renderer 接口定义了使用OpenGL 绘图时所需的方法。
该接口通过GLSurfaceView.setRenderer() 与GLSurfaceView 关联在一起GLSurfaceView.Renderer 定义了一个统一图形绘制的接口,它定义了如下三个接口函数:⏹onSurfaceCreated(GL10 gl, EGLConfig config):当创建GLSurfaceView 对象后,该方法被系统调用一次。
通常在该方法中设置OpenGL 环境的相关参数,初始化OpenGL 图形对象等,执行一些无须改变的初始化操作。
安卓复习笔记第一章andriod的部署与配置 (3)1. 安卓SDK的配置过程: (3)2.对应用进行单元测试 (3)第二章Activity (4)一、用LauncherActivity 开发Activity列表 (4)uncherActivity的使用 (4)2. ExpandableActivity 生成一个可展开的列表窗口 (4)3. 使用PreferenceActivity作为选项参数并进行保存的窗口 (4)二、启动和关闭Activity (4)1. Activity启动其他Activity有如下两种方法: (4)三、Activiy的生命周期 (5)第三章使用Intent和IntentFilter进行通信 (6)一、Intent的属性及配置 (6)ponent:是Intent的一个属性 (6)2.action和category用法 (6)二、请求码的作用 (6)三、结果码的作用: (6)第四章广播接收者-BroadcastReceiver (8)一、广播接收者(BroadcastReceiver) (8)二、使用广播进行短信的接收 (8)三、广播的用法 (9)四、对广播进行管理 (9)第五章数据存储与访问 (10)一、Android中数据存储的几种方式 (10)二、使用文件进行存储 (10)三、文件的四种访问权限 (10)四、读取文件内容 (10)1.使用openFileInput()方法 (10)2.直接使用文件的绝对路径 (10)五、把文件放在SDCard中 (11)六、使用SAX或者DOM或者pull解析XML文件 (11)1.使用SAX读取XML文件 (12)2. 使用Pull解析器读取XML文件 (12)3. 使用SharedPreferences进行数据存储 (13)第六章SQLite数据库存储数据 (14)一、SQLite数据库的特点: (14)二、对数据库版本进行管理 (14)三、使用SQLite数据库进行CRUD操作 (14)四、使用SQLiteOpenHelper获取用于操作数据库的SQLiteDatabase实例 (15)五、使用事务操作SQLite数据库 (15)第七章使用ContentProvider共享数据 (16)一、使用ContentProvider数据共享方法 (16)二、URI的组成结构 (16)三、操作Uri的工具类 (16)1.UriMatcher类的使用 (16)2. ContentsUri类使用:withAppendedId(uri, 10)和parseId(uri) (17)四、contentProvider类的主要方法 (17)五、使用ContentResolver操作ContentProvider中的数据 (17)六、ContentProvider中数据变化时发出通知 (18)第八章从Internet获取数据 (19)一、利用HttpURLConnection对象,我们可以从网络中获取网页数据 (19)二、利用HttpURLConnection对象,我们可以从网络中获取文件数据 (19)三、多线程断点续传下载 (19)四、向Internet发送请求参数 (20)五、利用HttpURLConnection对象,我们可以向网络发送xml数据. (20)第九章服务--Service (21)一、服务类的开发步骤 (21)二、与Activity能够通信的服务 (21)三、电话窃听器 (21)第十章Android中常用控件及功能组件 (23)一、音乐播放 (23)二、使用SoundPool播放音效 (23)三、视频播放 (23)四、使用摄像头拍照 (24)五、状态栏通知(Notification) (24)六、对话框通知(Dialog Notification) (25)七、创建带单选项列表的对话框 (25)第十一章自定义控件 (27)第一章andriod的部署与配置1.安卓SDK的配置过程:A)安装java JDK后设置环境变量java_homeJava_home=c:\Program files\java\jdk_1.6Java_jre_home=c:\Program Files\java\jdk_1.6\jreJre_home=c:\Program Files\java\jre6B)在配置好jdk的环境变量后对安卓中环境变量进行配置Android_SDK_HOME=c:\Mobile Phone DEV\Android SDKCLASSPATH=.;%JA V A_HOME%\lib;%JA V A_HOME%\lib\tools.jar;%JA V A_HOME%\lib\dt.jar;%JRE_HOME%\lib;%JRE_HOME%\lib\rt.jar;%JA V A_JRE_HOME%\lib;%JA V A_JRE_HOME%\lib\rt.jarPath=%Android_SDK_HOME%\tools;%JA V A_HOME%\bin;%JRE_HOME%\bin;%JA V A_JRE_HOME%\bin;2.对应用进行单元测试第一步:首先在AndroidManifest.xml中加入下面红色代码:<manifest xmlns:android="/apk/res/android"package="cn.itcast.action“ android:versionCode="1“ android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="android.test.runner" />....</application><uses-sdk android:minSdkVersion="6" /><instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="cn.itcast.action" android:label="Tests for My App" /></manifest>上面targetPackage指定的包要和应用的package相同。
第一章Android应用初体验1.android:layout_centerHorizontal= “true”水平居中对齐2.android:layout_centerVertical = “true” 垂直居中对齐3.android:layout_width和android:layout_height属性几乎每类组件都需要android:layout_width和android:layout_height属性。
它们通常被设置为以下两种属性值之一。
❑ match_parent:视图与其父视图大小相同。
❑ wrap_content:视图将根据其内容自动调整大小。
4.android:orientation属性是两个LinearLayout组件都具有的属性,决定了二者的子组件是水平放置的还是垂直放置的。
vertical:垂直放置horizontal:水平放置5.android:text属性TextView与Button组件具有android:text属性。
该属性指定组件显示的文字内容。
6.Android为整个布局文件以及各个字符串生成资源ID,但activity_quiz.xml布局文件中的组件除外,因为不是所有的组件都需要资源ID。
要为组件生成资源ID,请在定义组件时为其添加上android:id属性。
7.使用类包组织导入,就是让Eclipse依据代码来决定应该导入哪些Java或Android SDK类包。
如果之前导入的类包不再需要了,Eclipse也会自动删除它们。
通过以下组合键命令,进行类包组织导入:❑ Command+Shift+O(Mac系统);❑ Ctrl+Shift+O(Windows和Linux系统)。
8.通过调用来自Toast类的以下方法,可创建一个toast:该方法的Context参数通常是Activity的一个实例(Activity本身就是Context的子类)。
第二个参数是toast待显示字符串消息的资源ID。
android学习笔记android学习笔记--activity生命周期&handler使用(2011-03-24 21:20:56)转载▼标签:android笔记四、activity生命周期docs/index.html1、onCreate:第一次被启动、2、onStart:activity可视时调用、3、onResume:activity获得用户焦点是被调用、4、onPause:启动另外一个activity时被调用、5、onStop:另一个activity启动完成后被调用(第一个Activity 处于不可见的状态)、若启动另外一个activity时,onStop方法未执行,当重新回到第一个activity时直接调用OnResume6、onRestart:第一个activity未被销毁前又重新启动时被调用,执行完之后继续执行onStart7、onDestroy:activity代码中执行finish方法时或者android 系统资源不够用时自动销毁时调用窗口形态的activity在manifest.xml中定义activity时指定android:theme="@android:style/Theme.Dialog"即可activity还要考虑能否被kill掉,资源被系统回收,(被调用onPause onStop onDestroy的activity有可能被资源紧缺的系统所销毁)Task存放多个activity的栈五、handler的使用线程的生命周期:就绪、运行、阻塞、死亡1、创建一个handler对象:Handler handler = new Handler();2、调用post方法handler.post(updateThread);//把线程updateThread放入消息队列中去3、定义线程,并在run方法内部执行postDelayed或post方法继续循环Runnable updateThread = new Runnable(){public void run(){//执行自定义操作//过3000毫秒后再把线程放入消息队列中去被调用执行 handler.postDelayed(updateThread,3000);}};4、调用removeCallbackshandler.removeCallnacks(updateThread);//从消息队列中移除线程,结束handler执行handler.post(updateThread);1、Runnable updateThread = new Runnable(){public void run(){i =+ 10; //得到一个消息对象,Message类是由android系统提供Message msg = handler.obtainMessage();msg.arg1 = i;//将msg加入到消息队列中,然后会异步的执行handler的handleMessage方法取出消息handler.sendMessage(msg);if(i == 100){handler.removeCallbacks(updateTread);}}};2、使用匿名内部类复写Handler的handleMessage,取出消息队列中的Message对象Handler handler = new Handler(){public void handleMessage(Message msg){bar.setBarProgress(msg.arg1);//将线程继续加入到队列当中handler.post(updateThread);}};以上处理线程的过程中并没有建立新的线程,而是直接执行当前activity线程的run方法,若用以下方法,则定义一个新的线程并去执行新线程Thread t = new Thread(r)t.start();Runnable updateThread = new Runnable(){public void run(){}};。