Android快速开发笔记.docx
- 文档编号:11529303
- 上传时间:2023-03-18
- 格式:DOCX
- 页数:34
- 大小:4.92MB
Android快速开发笔记.docx
《Android快速开发笔记.docx》由会员分享,可在线阅读,更多相关《Android快速开发笔记.docx(34页珍藏版)》请在冰豆网上搜索。
Android快速开发笔记
Android快速开发笔记
Android快速开发1
1.每创建一个activity,都要继承Activity,复写onCreate方法,并且要在manifest中进行注册;注意:
复习onCreate后,马上在super.onCreate()下面加上setContentView(R.layout.xml),指定当前class的布局文件,否则会报错;
2.Layout下的xml是布局文件,com下的class文件是程序文件,string中存放所有文字类对象等等;
3.使用控件,先要在布局文件的xml中声明,设定控件id用android:
id=”@+id/ID”。
然后在class程序文件中调用控件,首先声明控件,然后荣格findViewById的方法。
例如:
TextViewtextview=(TextView)findViewById(ID);
4.给上面的textview赋值,textview.getText(“”);可以直接写值,也可以使用R.string的形式调用声明的字符串。
5.使用Intent进行activity切换(在class中编写)【向另外的activity中传值】
1)创建内部类
ClassmyButtonListenerimplemtesonClickListener(view){
Intentintent=newIntent();
【Intent.putExtra(“名称”,值);】
Intent.setClass(当前activity.this,目标activity.class);
当前activity.this.startActivity(intent);
}
2)将监听器绑定到按钮上
myButton.setOnClickListener(newmyButtonListener());
6.在另外的activity接收上一个activity传递过来的值
String变量=intent.getStrngExtra(上一个activity传过来的名称);
7.获得当前act上用户输入的内容(取得editText控件中用户输入内容)
1)先同findById的方法得到取值控件;
2)String变量=控件.getText().toString();
8.编辑手机的MENU键功能
1)先在class中复写onCreateOptionsMenu(Menumenu)方法;
2)编辑方法中的内容,添加:
menu.add(0,menuId,1,”关于”);
menu.add(0,menuId,2,”退出”);
3)复写onOptionsItemSelectet(MenuItemitem)方法,为菜单加上操作;
编辑判断:
if(item.getItemId()==“menuId”){执行对应操作按钮的操作}
Android快速开发2——单选框、复选框、吐司提示的使用
1.同样作为控件,单选框、复选框的使用仍然遵循:
1)在layout的xml中声明;
2)在程序文件的class中通过findViewById获取;
3)编辑并绑定适当的触发器;
以上操作只针对单选框和复选框,吐司提示类似web的alert,不用另外声明。
2.在layout的xml中声明单选框时,需要声明两个部分:
1)先声明一个
2)在每一个
3.在程序文件的class使用时,无论是声明的RadioGroup,RadioButton,CheckBox,每一个控件都要进行声明并获得:
例如:
privateRadioGroupgp=null;
PrivateRadioButtonrb1=null;
PrivateRadioButtonrb2=null;
PrivateCheckBoxcb=null;
rg=(RadioGroup)findViewById();
rb1=(RadioButton)findViewById();
rb2=(RadioButton)findViewById();
cb1=(checkbox)findViewById();
cb2=(checkbox)findViewById();
4.编写单选框部分的代码
和按钮的触发器不同,要直接在控件上编写绑定的代码,然后复写对应的接口代码。
单选按钮的触发器,绑定在RadioGroup上,
5.编写复选框部分的代码
复选框的监听器好单选框有类似的部分,但复选框是在每一个控件上加监听器,也就是当前页面上有几个复选框,就要声明并绑定几个监听器。
6.吐司提示框的使用
吐司提示框,用户在进行操作时,界面上闪现并慢慢消失的提示,使用时在操作的代码部分加上toast代码即可,例如:
Toast.makeText(参数1,参数2,参数3).show();
参数1:
当前代码的activity名.this
参数2:
希望在提示中显示的内容
参数3:
Toast.LENGTH_LONG,也可以是Toast.LENGTH_SHORT
android快速开发3——状态条
一、状态条分多种,在xml的布局文件里进行设置,这里简述两种。
使用状态条,只需xml和class两个文件:
首先在布局文件的xml里声明控件
图中的style代表这个进度条的样子,这里的设置是横向滚动。
注意visibility要设置成gone,这样默认加载时暂时不可见。
style="?
android:
attr/progressBarStyle"
第二种,只是这里有区别,这样设置是默认的一个不断旋转的圈。
然后在class中进行设置:
本例中为了执行方便,还声明了一个按钮控件。
首先声明变量,然后通过findViewById获取到控件。
为按钮添加监听器,复习OnClick方法:
为了控制进度条的显示,要在开始声明一个私有变量,privateinti=0;
在onClick中设置进度条的动作:
当i==0时,点击开始使进度条能显示,当i<100时,不断的增加。
直到>100会隐藏。
在elseif中,bar1分两句,上一句是主进度,显示为实线,setSecondaryProgress为付进度,显示为虚线。
如果想调整进度条的尺寸,可以在xml中设置android:
max=”需要的数值”,然后在class中的elseif里调整i 这样进度条的尺寸就可以根据设置灵活调整了。 综上所述,进度条的设置,关键在于首先在xml中要使其不可见,即GONE,然后根据动作不断增加显示,后面具体需要和线程配合使用。 Android快速开发4——ListView控件的使用 ListView控件主要用来在屏幕上,以列表形式显示数据,帮助用户进行浏览操作。 使用方法相对复杂一些,主要包括class和两个布局文件xml。 首先编辑第一个xml文件(main) 基本就是要使用linearlayout进行一下嵌套,先竖着线性,然后每行里的内容再线性,此处贴出的例子均是确认正确的。 注意设置的排列方向为垂直。 Scrollbars表示当显示不全时,上下滚动。 第二个xml(user.xml) 这里实际上是每一行的布局,本例中在每一行中有两个textView显示内容,实际可根据情况选择其他控件。 最后编辑class文件,与普通activity不同的是,使用listView控件的activity要继承ListActivity,如下: 需要注意几个地方: 1继承ListActivity这个方法 2声明ArrayList和hashmap,并给其填充内容,具体情况可根据数据要求写循环操作。 3声明SimpleAdapter,其中包含4个部分的内容,最后要setListAdapter。 最后如果要操作list中的记录,需要复写onListItemClick方法,如下: 根据实际需要,在这里添加对应的功能代码。 Android快速开发5——使用handler控制进度条 1基本使用 Handler被用来处理程序的异步操作,也就是用来编写多线程相关的程序。 基本的使用方法非常简单,核心代码只在class中编写,有时候为了增加开始和结束功能,会在布局文件xml中添加按钮控件,以下只针对class中具体的调用进行说明。 先要声明Handler,然后声明匿名内部类Runnable,实例化一个updateThread,再复写他的run方法,实际的操作写在这个run方法里。 这里的例子比较简单,就是执行一个日志打印,其中handler.postDelayed是每3000ms执行一次updateThread。 如果不想有延迟时间,直接用handler.post即可。 以上是handler执行的异步操作,还需要开始和结束按钮使线程开始和结束。 实际就是给两个按钮添加监听: 开始执行,就是把updateThread这个实例post进handler。 当前为马上开始进行操作。 结束执行时,使用removeCallBacks将updateThread从handler中移除即可。 最后将两个监听器绑定到对应的按钮上,即可完成操作。 在实际项目中,根据用处和实际情况,在run中编写实际的代码即可。 2使用Handler控制进度条的方法 首先在布局文件中声明一个横向进度条,同样通过findViewById获取,并声明一个按钮,添加应有的绑定,本例是使用按钮开始线程,由线程控制进度条的运行。 与普通的使用一样,先要声明匿名内部类 这里声明的内部类是updateBarHandler Bar1.setProgress(msg.arg1),由一个消息信息控制进度条的运行,这个消息msg来源于run中的代码。 同样的使用post把线程重新放进Handler实例中。 在Runnable中,首先声明一个i,并赋予初始值。 在run中: Messagemsg=updateBarHandler.obtainMessage();一个消息队列的使用。 Msg.arg1=i;在消息队列的参数1中接收i。 然后每500ms让线程执行一次。 把msg放入到updateBarHandler的消息队列。 当i等于100时,将线程移除。 最后是按钮触发器的实际操作; 首先从控件不可见,到将执行线程放入handler,然后根据run的代码自动运行。 最后将触发器绑定到按钮上。 Android快速开发6——Handler与activity的线程分离 上一个文档的例子里,使用开始按钮和结束按钮控制屏幕后台的日志打印,直接调用run方法,实际上这个操作和activity是没有分开的,根据实际验证,这个线程的信息和activity的线程信息完全一样,因此说明二者互相干涉,没有做到真正的分离,但实际应用肯定不行,需要把复杂的耗时场的处理放在单独的线程中,因此就要使用下面介绍的方法。 本例只在class中编写代码,实际功能是利用一个线程在日志中打印字符串。 系统加载后自动运行单独的线程执行操作。 代码分下面两部分: 如上图: 加载了布局文件之后,声明HandlerThread对象,然后使用start方法,这样才能开始一个独立于activity的线程,并且只有在使用了start方法,后面才能使用looper。 MyHandler是后面声明的一个匿名内部类,实例化时使用handlerThread的getLooper()方法,保证当时间轮盘轮转到时,可以占用CPU时间。 然后再声明一个Message对象,同时从myHandler中接受消息信息。 在msg中传递数据,arg1和arg2用来传递简单的整型数据。 还可以使用Bundle传递相对复杂的对象,对象是一组键值对,可以包含整数或字符串等常用内容。 声明Bundle对象,直接在b中put需要传递的内容。 setData(b),将b存入,sendToTarget,发送到目标,实际就是myHandler。 下面是第二部分, 声明匿名内部类,并继承Handler。 注意构造函数的使用,最后复写handleMessage的方法。 其中声明Bundle后,使用msg.getData接收来自之前sendToTarget的内容。 通过键值名称接收数据。 B.getInt和b.getString。 根据当前实例,加载布局文件后直接执行,实际会放在其他操作之后,如此就可以使线程得到分离。 Android快速开发7——SQLite编程 SQLite是android框架自身包含的一个小型关系数据库系统,他支持基本的SQL语句以及基本的表操作功能,能够满足android编程中对数据的基本操作,是一种简便的数据解决方案。 SQLite本身占系统资源非常小,一共才几十kb,所以使用他处理数据,对系统资源本身的影响比较小,但是需要注意,出于各种原因,SQLite本身会存在一些让人莫名其妙的bug,故对于SQLite,仅限于处理简单的数据事务,不适合处理复杂的业务。 以下通过几个截图,说明具体使用方法: 整个开发过程分几部分,首先xml布局文件中,要有基本的按钮,以及其他需要的控件,并绑定对应的监听器,具体方法不再赘述。 其次,需要两个class文件,一个是SQLiteActivity.class,对应主界面的java文件,另一个是DatabaseHelper.class,一个助手类文件。 首先看这个助手类: 首先: 这个class需要继承一个SQLiteOpenHelper的方法,然后分别创建三个构造函数,其中三组构造函数的初始化赋值有所不同。 基本型包含全部的4个参数: context,name,factory,version Context就是activity对象; Name就是要操作的表名; Factury暂时传null; Version为操作数据库的版本,是一个递增正数,若数据库有增删改的变化,需要给这个值; 只有context和name的构造函数,只用在初始化建表的时候; 包含context,name,version三个参数的构造函数,用在对表进行修改的时候; 紧接着要复写onCreate()和onUpgrade()两个方法: onCreate()方法,包含的是建表等语句,只执行一次,使用两个参数的构造函数进行初始化。 onUpgrade()方法,在回调函数有版本号变化时执行,操作数据库的增删改操作。 以上基本的助手类就编写完成了。 下面是SQLiteActivity.class的编写: 首先要了解到,如何在命令行里操作sqlite库的文件。 在手机模拟器启动的情况下(不启动找不到),到adt工具的安装目录,找到sdk目录,进入“platform-tools”,找到adb.exe,执行adbshell,进入模拟器的linux环境,此时提示符变成“#”。 找到根目录的data文件夹,进入,再进入一层data目录,可以看到当前系统中所有开发和安装的com包文件。 当这个项目(com包中)执行过sqlite的建表文件,就会包含一个databases的目录,进入这个目录,就可以使用SQL语句直接操作表数据。 当进入了该目录后,执行sqlite3dbname,进入sql模拟状态,操作方法跟其他SQL工具一致。 .schema,查看当前库里有哪些表。 实际代码操作如下: 继承基本的activity类,然后在onCreate()方法中获取按钮等控件的使用,添加对应的点击响应,这些内容和其他控件的使用没有区别。 1下面是表的创建 在创建数据库按钮的匿名类中,复写onClick方法,回调函数,包含两个参数: SQLiteActivity.this,就是当前的activity,后面的“”中的,是创建的表名。 只有在添加了后面getReadableDatabase()方法并执行后,才真正创建一个新表。 最后将这个操作绑定到对应的按钮点击监听器上即可。 2更新表结构 更新表结构时,回调函数使用3个参数,增加一个版本号,这样会调用那个upgrade()方法,如果里面有表结构的修改语句,则会对表结构进行修改。 3插入数据 插入数据的时候,先声明一个contentValues对象,实例化以后,向他put键值对,键名为表的字段,后面会根据字段类型自动判断传入的数据类型。 同样调用upgrade()的方法,之后使用db.insert将contentValues的值传入到这个表中,完成数据插入。 4更新数据 类似于插入数据,同样使用contentValues对象,调用getWritableDatbase方法,后面用db.update执行操作。 “id=? ”是条件语句 String[]{“1”}中,有几个“? ”条件,这里就跟几个成员。 5查询数据 查询数据,需要一个指针的方法,默认指向第一条记录的前面,使用cursor.moveToNext向下移动,类似rs.next的用法。 在cursor获取查询结果时: “user”是表名; “String[]{“id”,”name”}”是获取的表的字段; “id=? ”是查询条件; String[]{“1”}是查询条件的具体值,根据有几个条件,这里有几个成员; 最后的4个null,是查询时的几个设置,orderby、group等,具体可通过提示了解。 最后在获取具体值的时候,使用cursor得到要获取值的列的编号,但是获取编号又要使用该列的名称,因此完整的语句就是: cursor.getString(cursor.getColumnIndex(“name”)); 以上为使用sqlite进行的表结构新建、修改操作,表记录的增、改、查询操作。 如果只涉及查询,则只调用getReadableDatabase方法,如果涉及修改,则要调用getWritableDatabase方法。 Android快速开发8——文件下载 在android实现文件的下载,使用的是java的IO流,基本原理和思想与j2se、j2ee一致,以下为一个简单的样例,分为下载文本文件和任意类型文件。 本例中,包含一个xml布局文件和3个class文件,如上图,为这3个java文件,其中: Download为对应xml的activity; HttpDownloader为下载功能主要函数和方法; FileUtils为封装的一些文件操作方法; 下面先看Download这个activity: 分别放置了两个按钮,一个用来下载文本文件,一个用来下载其他任意格式的文件。 在两个监听器里,分别绑定了两种方法,方法调用的参数如图中所标。 接下来是HttpDownloader.java文件,里面主要是两个监听器里绑定的方法 注意需要先声明一个URL类型的变量,以备下面使用。 以下是下载文本文件的详细代码: 本方法中,只有一个参数,就是要下载的文件的地址(包括文件名),返回的是一个文件流,使用时把这个文件流赋值给字符串变量。 以下是下载任意类型文件的代码: 这个方法用来下载任意格式的文件,比较实用,三个参数分别是: urlStr: 被测文件的地址(包含文件名); path: 存储到手机本地(SD卡的路径); fileName: 保存到本地时的文件名; 返回值: 当下载出现异常失败时,返回-1,当本地指定路径已经存在该文件时,返回1,当下载成功时,返回0; 本方法中的getInputStreamFromUrl()方法,是本class文件中单独实现的一个方法,用来把从url中读取到的文件流,赋值给变量进行处理,代码如下: 以上的代码是两个下载按钮绑定的基本方法,其中包含了一些“在SD卡创建目录,创建文件,判断文件存在,写数据”的方法,封装到了另一个class文件FileUtils中。 首先声明String类型变量SDPATH,声明get方法,用构造函数给SDPATH赋值初始化, Environment的方法可以让程序适应任意的手机环境,然后依次是4个文件操作方法: 基本代码编写完成后,因为本例中使用了网络访问和存储卡读写等操作,所以要在配置文件manifest上设置权限,才能正确使用: 至此,android的基本文件下载功能完成。 Android快速开发9——使用SAX处理XML文件 使用SAX处理XML文件,边读取边处理,本例包含3个文件: 1xml文件,2基本操作的activity,3MyContentHandler.java。 首先xml文件的内容中包含以下格式: 在activity中编写如下代码,在监听器中增加功能代码: 在onClick方法中增加上面代码: 先声明一个httpDownloader对象,然后调用文本下载的方法,将xml文件当做一个文本文件读入一个变量。 SAXParserFactory是这里的固定用法,然后用reader中的方法去处理具体的xml文件。 MyContentHandler是另一个编写的class,里面包含处理xml的具体方法。 Reader的parse方法,处理两个内部方法,InputSource和StringReader。 下面是MyContentHandler的代码: 首先以适配器模式,这个类要继承DefaultHandler类; 声明的变量用来存储xml中的每个元素。 tagName用来存储每个元素的标签名。 startDocument和endDocument用来处理开始的根节点。 startElement和endElement用例处理一级节点,本例为worker,具体代码为: localName为不带前缀的名称(**: ),qName为带前缀的名称,attribute为标签属性(尖括号中值的部分) 首先把localName存入tagName待用,然后判断,当localName为预计的一级标签时,循环属性个数长度,把第序号个标签而定属性和值存起来。 当在结束标签中遇到worker时,结束处理,加了一个打印的方法,这个方法是在下面手写的。 具体处理标签字段中的值,由于每次已经把标签名存入tagName了,所以用if判断,当标签为指定名称时,将对应信息存入变量。 基本按格式固定用法。 最后是结束标签时打印的操作。 如此处理完先下载,后处理xml文件的操作(下载的方法参加相关部分)。 Android快速开发10——广播机制1 在程序运行时,使用广播的形式处理发送端不需要确认接收端的处理状态的情况,就像实际的广播一样,发出了信号,但接收端是否接收了,是否处理了,不在发送端的处理之中。 就好像UDP协议,只管发送数据,是否收到则不做考虑。 本例为广播机制最简单的使用,需要两个文件: 1基本界面的activity,2负责处理事件的class文件。 下面是负责处理事件的class文件,本例比较简单: 首先名称,要注意,需要放在manifest中进行注册用,用例区分多个不同的broadcast; 这个类要继承BroadcastReceiver这个类; 先声明构造函数publicTestReceiver(){写入需要的方法}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 快速 开发 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)