Android应用开发-“我的日记”的设计与实现课件_第1页
Android应用开发-“我的日记”的设计与实现课件_第2页
Android应用开发-“我的日记”的设计与实现课件_第3页
Android应用开发-“我的日记”的设计与实现课件_第4页
Android应用开发-“我的日记”的设计与实现课件_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务四

“我的日记”的设计与实现支撑知识:ProgressBar控件、线程、Activity间的跳转与生命周期、简单数据存储、文件存储任务四

“我的日记”的设计与实现支撑知识:ProgressB1ProgressBar与线程的结合Activity之间的跳转Activity的生命周期重难点Android简单的数据存储文件存储ProgressBar与线程的结合Activity之间的跳转2知识目标掌握Android的ProgressBar控件的属性设定、使用方法;掌握Activity的生命周期、各状态的转化关系与对应的回调函数;掌握Intent的作用、重要属性、常见方法;理解简单数据存储SharedPreferences的使用场合、使用方法;掌握文件存储的常见使用方法。知识目标掌握Android的ProgressBar控件的属性3能力目标能够利用Handler与ProgressBar控件相结合演示进度;能够利用Intent的属性与方法实现Activity的跳转;能够利用SharedPreferences实现简单的数据存储;能够实现Android中的文件存储。能力目标能够利用Handler与ProgressBar控件相4项目流程任务简介任务分析支撑知识任务实施任务小结拓展训练项目流程任务简介任务分析支撑知识任务实施任务小结拓展训练5任务简介分析知识实施小结拓展任务简介分析知识实施小结拓展6进行程序演示,请同学们观察该应用实现了哪些功能?该应用需要哪些控件与Android知识点支撑?任务简介分析知识实施小结拓展进行程序演示,请同学们观察该应用实现了哪些功能?任务简介分析7任务简介分析知识实施小结拓展TextViewEditTextCheckBox与SharedPreferencesButtonProgressBar与线程Button与文件存储Activity进行跳转EditText与文件存储任务简介分析知识实施小结拓展TextViewEditText8任务简介分析知识实施小结拓展本次任务涵盖以下支撑知识点:ProgressBar控件的使用;Activity生命周期与回调函数;Activity之间的跳转;文件存储;简单数据存储。任务简介分析知识实施小结拓展本次任务涵盖以下支撑知识点:9支撑知识

1.ProgressBar控件支撑知识

1.ProgressBar控件10ProgressBar为进度条控件,通常是在用户等待程序运行结果等耗时较长的情况下,作为一个反馈机制,来告知用户目前的进展程度,避免用户误以为程序没有响应,从而提高程序的用户体验。1.1简介环形进度条ProgressBar为进度条控件,通常是在用户等待程序运行111.2属性属性作用示例style设置ProgressBar进度条的风格

style=“@android:style/Widget.ProgressBar.Horizontal”

:水平进度条style=“@android:style/Widget.ProgressBar.Inverse”:进度条为反转样式的环形进度条style=“@android:style/Widget.ProgressBar.Large”:进度条为大环性进度条1.2属性属性作用示例style设置ProgressBar121.2属性属性作用示例android:indeterminate开启进度条的“不确定模式

android:indeterminate=“true”:进度条会显示不停地在循环滚动的动画效果,但是不会显示实际的进度。android:indeterminateBehavior

决定当进度条中的进度达到最大值的时候,此时进度条要显示的动画效果

android:indeterminateBehavior

=“repeat

“:进度条中的进度达到最大值之后,将重新从0开始;android:indeterminateBehavior

=“cycle”

:进度条中的进度达到最大值之后,将保持现值,然后逐渐反向回退到0。1.2属性属性作用示例android:indetermi131.2属性属性作用示例android:indeterminateDrawable

设置进度条上的Drawable对象android:indeterminateDrawable=“@id/XXX”:XXX为图片资源名android:indeterminateOnly强制进度条的“不确定模式”android:indeterminateOnly=“true”:强制进度条为“不确定模式”android:progress设置进度条默认的进度值,取值必须为介于0和最大值之间的整数

android:progress="0"android:max设置进度条最大值android:max=“8"1.2属性属性作用示例android:indetermin14方法作用示例intgetProgress()获得当前进度条的进度值

intprogress=progressBar.getProgress();voidsetProgress(intprogress)设定进度条的当前进度

progressBar.setProgress(0);voidsetMax(intmax)设定进度条的范围

progressBar.setMax(200);1.3方法方法作用示例intgetProgress()获得当前进度15方法作用示例voidsetIndeterminate(booleanindeterminate)设置进度条是否处于“不确定模式”progressBar.setIndeterminate(true);finalvoidincrementProgressBy(intdiff)设置进度条的进度增加或是减少,当入参为正整数时,进度增加;当入参为负整数时,进度减少。

progressBar.incrementProgressBy(-5);1.3方法方法作用示例voidsetIndeterminate(b16演示如何创建ProgressBar控件;演示如何利用ProgressBar控件的属性与方法1.4示例演示1.4示例演示17支撑知识

2.线程支撑知识

2.线程18所有界面控件相关的操作,实际上都是由主UI线程(主用户界面线程)在负责运行。但有时候程序会执行一些耗时的操作,一般的解决方案是将耗时的操作交给另外一个子线程来执行,从而保证主UI线程的顺畅。2.1简介所有界面控件相关的操作,实际上都是由主UI线程(主用户界面线192.1简介子线程Thread:负责耗时的操作主UI线程:负责与用户操作交互Handler发送消息Handler接收消息,更新UIMessage休眠1秒Handler发送消息MessageHandler接收消息,更新UI休眠1秒Handler发送消息MessageHandler接收消息,更新UI2.1简介子线程Thread:负责耗时的操作主UI线程:负20方法作用示例Thread.Thread(Runnablerunnable)构造方法,用于创建子线程对象。

Threadt=newThread(newRunnable(){ publicvoidrun(){…}}Thread.start()运行线程

thread.start();Thread.sleep(longtime)让线程休眠thread.sleep(1000);//休眠1秒2.2方法方法作用示例Thread.Thread(Runnabler21方法作用示例booleanHandler.sendMessage(Messagemsg)发送消息handler.sendMessage(newMessage());voidHandler.handleMessage(Messagemsg)接收处理消息

handler.handleMessage(msg);2.2方法方法作用示例booleanHandler.sendMe22演示如何创建子线程;演示如何将线程与ProgressBar控件相结合,实现5秒的进度条显示2.3示例演示2.3示例演示23支撑知识

3.Activity间的跳转支撑知识

3.Activity间的跳转24Intent是两个Activity之间进行跳转的媒介。Android中,当一个Activity需要跳转到另外一个Activity时,就需要用到Intent了。Intent中文为“意图”,意味着Android程序在进行页面跳转时,只需告知系统它的“意图”:需要启动哪一个Activity。3.1Intent简介Intent是两个Activity之间进行跳转的媒介。3.253.2属性-Action属性Action常量对应的字符串含义说明ACTION_VIEWent.action.VIEW向用户显示数据ACTION_EDITent.action.EDIT向用户提供编辑某个数据的途径ACTION_DIALent.action.DIAL向用户显示一个电话拨号面板界面ACTION_MAINent.action.MAIN标志着该Activity是某个Application应用程序的入口点ACTION_ATTACH_DATAent.action.ATTACH_DATA指明附加信息给其他地方的一些数据ACTION_CALLent.action.CALL向用户直接显示打电话的界面3.2属性-Action属性Action常量对应的字符串含263.2属性-Data属性Data属性是用来向Action属性提供可操作的数据的采用Uri对象的格式,即scheme://host:port/path。content://contacts/people/1ACTION_VIEWcontent://contacts/people/1:显示id为1的联系人信息;ACTION_DIALcontent://contacts/people/1:将id为1的联系人电话号码显示在拨号界面中;ACITON_VIEWtel:123:显示电话为123的联系人信息;ACTION_VIEW:在浏览器中浏览谷歌网站。3.2属性-Data属性Data属性是用来向Action属273.2属性-Category属性Category常量对应的字符串含义说明CATEGORY_DEFAULTent.category.DEFAULTAndroid系统中默认的分类CATEGORY_HOMEent.category.HOME设置该Activity为HomeActivityCATEGORY_PREFERENCEent.category.PREFERENCE设置该Activity为参数面板3.2属性-Category属性Category常量对应的283.2属性-Category属性Category常量对应的字符串含义说明CATEGORY_LAUNCHERent.category.LAUNCHER设置该Activity为在当前应用程序启动器中优先级最高的Activity,通常与ACTION_MAIN配合使用CATEGORY_BROWSABLEent.category.BROWSABLE设置该Activity能被浏览器启动CATEGORY_DEFAULTent.category.DEFAULTAndroid系统中默认的分类CATEGORY_HOMEent.category.HOME设置该Activity为HomeActivity3.2属性-Category属性Category常量对应的293.2属性-Component属性指定了Component属性以后,Intent的其他所有属性都是可选的。这种方式的优点在于无需查找,直接调用目标组件,速度快捷。3.2属性-Component属性指定了Component303.2属性-Extras属性Bundle对象Bundle类与Map类很相似,它可以放入多对key-value键值,这样在通过Intent对象进行Activity跳转时,就能够进行数据的传递了。3.2属性-Extras属性Bundle对象313.3方法方法作用示例Intent.setAction(Stringaction)设置Action属性Intentintent=newIntent();

intent.setAction(Intent.ACTION_WEB_SEARCH);

Intent.setData(Stringdata)设置Data属性intent.setData(Uri.parse(""));Intent.setType(Stringtype)设置Type属性intent.setType(vnd.android.cursor.dir/contact);

Intent.putExtras(Bundlebundle)设置Extra属性Bundlebundle=newBundle();bundle.putString(“KEY_HEIGHT”,”180”);bundle.putString(“KEY_WEIGHT”,”80”);intent.setExtra(bundle);

3.3方法方法作用示例Intent.setAction(323.3方法方法作用示例Intent.setClass

(Context

packageContext,

Class<?>cls)明确intent跳转时的源Activity和目标Activity

Intentintent=newIntent();

intent.setClass(context,targetActivity.class);setClassName(Context

packageContext,

StringclassName)明确intent跳转时的源Activity和目标Activity

intent.setClassName(MainActivity.this,"ent.SecondActivity");Context.startActivity(Intentintent)根据intent启动某个Activity

Intentintent=newIntent();

intent.setClass(context,targetActivity.class);startActivity(intent);3.3方法方法作用示例Intent.setClass

(33列举一些常见的Activity跳转案例演示Intent的使用方法3.4示例演示3.4示例演示341.创建一个布局文件2.创建一个类继承自Activity,并绑定布局文件3.AndroidManifest注册Activity4.使用Intent跳转到Activity3.5跳转至另外一个Activity的步骤3.5跳转至另外一个Activity的步骤35支撑知识

4.Activity的生命周期支撑知识

4.Activity的生命周期36活动状态:处于Activity栈的栈顶,用户启动应用程序或Activity之后,该Activity位于屏幕前台,用户可见,能获得焦点(即用户可以操作它)。同一时刻只会有一个Activity处于活动状态;暂停状态:该Activity位于前台,但是被另外一个处于“活动”状态的Activity(比如对话框风格的Activity)遮挡住一部分,没有焦点,用户不能直接对其进行输入操作,但界面依旧可见,该Activity的状态处于“暂停”状态。停止状态:该Activity被其他Activity完全挡住,不再可见,也失去了焦点;销毁状态:该Activity被终止。4.1生命周期活动状态:处于Activity栈的栈顶,用户启动应用程序或A374.2

回调函数启动ActivityActivity停止状态Activity销毁状态Activity暂停状态Activity运行状态onCreate()onStart()onPause()onResume()onStop()onDestroy()onRestart()另一个Activity来到前台该Activity重返前台该Activity不可见该Activity重返前台4.2回调函数启动ActivityActivity停止状38演示回调函数的执行4.3示例演示4.3示例演示39支撑知识

5.Activity的文件存储支撑知识

5.Activity的文件存储40Android手机中的文件(如文本、图片、音频视频)可以存储在手机内存中或是外部存储器SD卡中,Android中提供了标准的Java文件输入输出流(FileOutputStream、FileInputStream)的方式来对文件数据进行读写。随着文件存储位置(内存、外部存储器)的不同,我们获取Java文件输入输出流的方式并不一样。5.1简介/data/data/【包名】/files/mnt/sdcard/Android手机中的文件(如文本、图片、音频视频)可以存储415.1相关的类FileFileOutputStreamFileInputStreamwrite方法read方法5.1相关的类FileFileOutputStreamF425.2

重要方法方法作用示例FileOutputStreamopenFileOutput(Stringname,intmode)对于存储在手机内存中的文件,获得标准的Java文件输出流

//获得了某个文件的输出流,文件数据只能被本应用程序访问FileOutputStreamoutputStream=openFileOutput(filename,0);//获得某文件的输出流,新的文件数据将以追加的方式写入到该文件中FileOutputStreamoutputStream=openFileOutput(filename,Context.MODE_APPEND

);FileOutputStream构造方法根据File对象获取其Java文件输出流

FileOutputStreamoutputStream=newFileOutputStream(file);//参数为File对象5.2重要方法方法作用示例FileOutputStrea435.2

重要方法方法作用示例FileInputStream构造方法openFileInput(Stringname)对于存储在手机内存中的文件,获得标准的Java文件输入流

FileInputStreaminputStream=openFileInput(filename);//参数为文件名FileInputStream构造方法根据File对象获取其Java文件输入流

FileInputStreaminputStream=newFileInputStream(file);//参数为File对象5.2重要方法方法作用示例FileInputStream445.2

重要方法方法作用示例File

(File

dir,

String

name)对于存储在某个目录上的文件,我们在获得Java文件输入输出流前,需要调用该方法来获得该文件所对应的File对象。Filefile=newFile(Environment.getExternalStorageDirectory(),filename);//获得SD卡目录中的某个文件对象5.2重要方法方法作用示例File

(File

dir,455.2

重要方法方法作用示例staticFileEnvironment.getExternalStorageDirectory()

获取手机外部存储目录即SD卡对应的File对象

//在/mnt/sdcard目录下创建File对象Filefile=newFile(Environment.getExternalStorageDirectory(),filename);staticStringEnvironment.getExternalStorageState()获得手机外部存储器即SD卡的当前状态

Environment.MEDIA_MOUNTED为SD卡处于加载状态5.2重要方法方法作用示例staticFileEnv46演示File文件存储的使用默认目录存储和读取指定目录存储SD卡目录存储5.3示例演示5.3示例演示47支撑知识

6.SharedPreferences支撑知识

6.SharedPreferences48为什么需要SharedPreferences?

6.1简介1.输入用户名密码2.勾选“记住密码”登录3.再次登录时为什么需要SharedPreferences?6.1简49点击【登录】时,需要保存用户名和密码6.1简介写文件username:adminpassword:12345file.txt读文件将文件内容读出后,还需要进行字符串的解析,提取出用户名和密码的内容。点击【登录】时,需要保存用户名和密码6.1简介写文件us50SharedPreferences为我们提供方便的、轻量级的数据存储;通常是用作应用程序中的参数配置或是一些属性的存储设置。例如我们可以通过它来保存用户上一次保存的信息或所做的修改,下一次应用程序启动后,就会为用户加载上一次保存的信息,可以减少用户重复设置、输入等麻烦,方便应用。SharedPreferences所存储的数据是以“键-值”的格式保存在xml文件中。该xml文件将存在于工程中的/data/data/包名/shared_prefs目录下。6.1简介SharedPreferences为我们提供方便的、轻量级的516.2

重要方法方法Context类的方法:SharedPreferencesgetSharedPreferences(String

name,intmode)功能获得SharedPreferences的xml文件中的内容。参数name为xml文件名;mode为读写模式:Context.MODE_PRIVATE:只能被本应用程序访问;Context.MODE_WORLD_READABLE:其他应用可读Context.MODE_WORLD_WRITEABLE:其他应用可写返回值SharedPreferences的对象6.2重要方法方法Context类的方法:功能获得Sha526.2

重要方法-写SharedPreferences获取SharedPreferences对象获取Editor对象向Editor对象中写入“键-值”提交6.2重要方法-写SharedPreferences获取536.2

重要方法方法SharedPreferences类的方法:Editoredit()功能获得SharedPreferences的编辑器对象。参数无返回值无示例:SharedPreferencessp=getSharedPreference("userinfo",MODE_PRIVATE);Editoreditor=sp.edit();6.2重要方法方法SharedPreferences类的546.2

重要方法方法Editor类的方法:EditorputXXX(Stringkey,XXXvalue)功能向SharedPreferences中写入“键”所对应的“值”参数key为“键”,字符串类型value为“值”,可为Boolean、int、long、float、String等类型返回值Editor编辑器对象示例:editor.putBoolean("REMBERPWD",false);6.2重要方法方法Editor类的方法:功能向Share556.2

重要方法方法Editor类的方法:booleancommit()功能提交Editor编辑器中所修改的内容参数无返回值无示例:mit();6.2重要方法方法Editor类的方法:功能提交Edit566.2

重要方法-读SharedPreferences获取SharedPreferences对象根据“键”读取其“值”6.2重要方法-读SharedPreferences获取576.2

重要方法方法SharedPreferences类的方法:XXXgetXXX(String

key,XXXdefValue)功能获得SharedPreferences中的指定“键”所对应的“值”参数key为要获取的数据的“键”如果key不存在,则返回默认值defValue返回值如果key存在,就返回对应的“值”如果key不存在,则返回默认值defValue示例:SharedPreferencessp=getSharedPreference("userinfo",MODE_PRIVATE);Booleanflag=sp.getBoolean("REMBERPWD",false);6.2重要方法方法SharedPreferences类的586.2

其他方法(写SharedPreferences)方法作用Editor

remove(Stringkey)在SharedPreferences中删除“键”所对应的“值”Editorclear()清空SharedPreferences中所有的“键-值”对6.2其他方法(写SharedPreferences)方59演示如何利用SharedPreferences

保存登录界面中的密码6.3实例演示演示如何利用SharedPreferences保存登录界面60Key类型含义REMBERPWDBooleanTrue为记住密码,False为不需要记住密码USERNAMEString用户名PWDString密码6.3实例演示Key类型含义REMBERPWDBooleanTrue为记住61点击【登录】按钮,判断是否勾选了【记住密码】:勾选:设定REMBERPWD的值为True,并设定USERNAME和PWD的值未勾选:设定REMBERPWD的值为False,并清除USERNAME和PWDonCreate方法,读取REMBERPWD的值,判断该值:True:读取USERNAME和PWD,并显示到EditText中,勾选了【记住密码】False:啥都不干6.3实例演示点击【登录】按钮,判断是否勾选了【记住密码】:6.3实例62任务简介分析知识实施小结拓展我们通过以下的流程来实现:总体分析界面布局创建项目创建字符串资源创建控件样式界面布局功能实现程序运行任务简介分析知识实施小结拓展我们通过以下的流程来实现:63任务实现

1.总体分析任务实现

1.总体分析641.1登录界面TextView控件EditText控件CheckBox、SharedPreferencesButton控件一个隐藏的ProgressBar、线程1.1登录界面TextView控件EditText控件Ch651.2“写入日记”界面EditText、文件存储Button、文件存储1.2“写入日记”界面EditText、文件存储Butto661.3流程处理程序启动,载入“登录”界面输入用户名/密码单击“登录”按钮从手机内存中读取“MyDiary.txt”文件,将内容显示跳至“写入日记”界面从SharedPreferences读取密码密码保存至SharedPreferences修改内容,单击“保存”按钮程序退出记住密码?记住密码?N用户名/密码正确?单击【返回】键两次?YYYYNNN1.3流程处理程序启动,载入“登录”界面输入用户名/密码单67任务实现

2.界面布局任务实现

2.界面布局68演示创建项目:创建一个Android应用程序项目,取名为MyDiary;将默认的Activity名称MainActivity.java重命名为LoginActivity.java,其对应的XML布局文件为res\layout\activity_login.xml;新建一个Activity名称为DiaryActivity.java,其对应的XML布局文件为res\layout\activity_diary.xml

。2.1创建项目演示创建项目:2.1创建项目69演示创建字符串资源:在res/values/strings.xml

中添加字符串资源:2.2创建字符串资源

<stringname="hint_username">用户名</string><stringname="hint_pwd">密码</string><stringname="remember_pwd">记住密码</string><stringname="btn_login">登录</string><stringname="btn_save">保存</string><stringname="view_mydiary">我的日记</string><stringname="hint_mydiary">请在这儿写下你的心情日记</string>演示创建字符串资源:2.2创建字符串资源<string70演示如何创建<shape>资源2.3创建控件样式<?xmlversion="1.0"encoding="utf-8"?><shapexmlns:android="/apk/res/android"><!--黑色边框,宽度为2dp--><strokeandroid:width="2dp"android:color="#000"/><!--背景色为黄金色--><solidandroid:color="#fbe6c9"/></shape>演示如何创建<shape>资源2.3创建控件样式<?xml712.4登录界面布局的实现RelativeLayoutactivity_login.xml总体布局采用RelativeLayout相对布局放置各种控件“我的日记”Textview用户名/密码EditText记住密码CheckBox登录Button进度条ProgressBar2.4登录界面布局的实现RelativeLayoutact72activity_diary.xml总体布局采用LinearLayout垂直线性布局放置各种控件利用<shape>资源设置“写日记”的EditText控件的边框与背景色2.5“写入日记”界面布局实现LinearLayout“写日记”的EditText“保存”按钮activity_diary.xml总体布局采用Linear73任务实现

3.功能实现任务实现

3.功能实现743.1登录界面功能实现-申明变量在LoginActivity.java类中申明成员变量,包括控件相关的对象、SharedPreferences对象、处理消息的Handler对象、记录当前进度的progress变量。publicclassLoginActivityextendsActivity{ EditTextusernameEdit;//用户名输入框

EditTextpwdEdit;//密码输入框 CheckBoxrememberPwdCheck;//记住密码的复选框 ButtonloginBtn;//登录按钮 ProgressBarprogressBar;//进度条 SharedPreferencespref;//简单数据存储 Handlerhandler;//线程的手柄 staticfinalintSTOP=0x111;//进度完成的标志 staticfinalintCONTINUE=0x112;//继续显示进度条的标志 staticfinalintMAX=100;//最大的进度为100% intprogress;//进度条的当前进度3.1登录界面功能实现-申明变量在LoginActivit753.1登录界面功能实现-完成程序总体框架在LoginActivity.java中重写onCreate()方法protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState); setContentView(R.layout.activity_login);

init();//初始化工作

setListeners();//事件监听}voidinit(){

/*初始化控件变量*/

initViews();

/*初始化线程的手柄*/

initHandler();}3.1登录界面功能实现-完成程序总体框架在LoginAct763.1登录界面功能实现-实现initViews()方法voidinitViews(){ usernameEdit=(EditText)findViewById(R.id.edit_username);

… pref=getSharedPreferences("userinfo",Context.MODE_PRIVATE); usernameEdit.setText(pref.getString("USERNAME","")); if(pref.getBoolean("REMBERPWD",false)){ pwdEdit.setText(pref.getString("PWD",""));

}else{

pwdEdit.setText(""); } rememberPwdCheck.setChecked(pref.getBoolean("REMBERPWD",false)); progress=0; progressBar.setProgress(progress); progressBar.setMax(MAX);}3.1登录界面功能实现-实现initViews()方法vo773.1登录界面功能实现-实现initHandler()handler=newHandler(){

publicvoidhandleMessage(Messagemsg){

switch(msg.what){

caseCONTINUE://进度未完成

if(!Thread.currentThread().isInterrupted()){//当前线程正在运行

progressBar.setProgress(progress);

}

break; caseSTOP://进度已完成

Intentintent=newIntent();

intent.setClass(LoginActivity.this,DiaryActivity.class);

startActivity(intent);

finish();//结束该Activity

break;

}}};}3.1登录界面功能实现-实现initHandler()ha783.1登录界面功能实现-实现setListeners()

Stringusername=usernameEdit.getText().toString();

Stringpwd=pwdEdit.getText().toString();

if((!username.equals("admin"))||(!pwd.equals("admin"))){

Toast.makeText(LoginActivity.this,"用户名或密码不正确",Toast.LENGTH_LONG).show();

}else{

/*用户名与密码都正确的情况处理*/

Editoreditor=pref.edit();

if(rememberPwdCheck.isChecked()){

editor.putString("USERNAME",username);

editor.putString("PWD",pwd);

editor.putBoolean("REMBERPWD",true);

mit();

}else{

editor.putBoolean("REMBERPWD",false);

}

usernameEdit.setEnabled(false);

pwdEdit.setEnabled(false);

loginBtn.setEnabled(false);

}

处理“记住密码”的SharePreference3.1登录界面功能实现-实现setListeners() 793.1登录界面功能实现-实现setListeners()progressBar.setVisibility(View.VISIBLE);newThread(newRunnable(){

publicvoidrun(){

for(inti=0;i<5;i++){ progress=(i+1)*20; Thread.sleep(1000); if(i==4){

Messagemsg=newMessage(); msg.what=STOP; handler.sendMessage(msg); break; }else{

Messagemsg=newMessage(); msg.what=CONTINUE; handler.sendMessage(msg); }

}}).start();

显示5s的进度条/*循环5次,每次睡眠1s*/3.1登录界面功能实现-实现setListeners()p803.2“写入日记”界面与功能实现-变量申明在DiaryActivity类中申明成员变量,包括控件相关的对象、用于文件操作的输入输出流对象、实现两次按“返回键”退出应用程序相关的变量:EditTextmydiaryEditText;//"写入日记"的文本输入框ButtonsaveButton;//"保存"按钮staticfinalStringFILENAM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论