当前位置: 网学 > 编程文档 > Android > 正文

19_android

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员为大家收集整理了19_android提供大家参考,希望对大家有所帮助!


    1203
    1.android开发前准备
     1)eclipse需要有adt插件
     2)android的工具包sdk
     3)为eclipse配置android的sdk路径
     window==>preferences==>左侧android,右侧选择sdklocation
     4)创建一个android模拟器
    2.android四大组件:
     activity:为用户提供一个外观界面,显示信息或者收集用户信息
     Service:提供操作后台运行
     BroadcastReceiver:接收全局事件,然后执行相应的逻辑
     ContentProvider:将数据共享,可以被外部其他应用程序访问
    3.创建一个android项目,必须
     i.为项目创建一个名称
     ii.选择项目sdk版本
     iii.提供包名
    4.xml文件结构:
     <标记属性="值"属性2="值"/>单标记
     <标记属性="值"属性2="值">标记开始
     <标记.../>
     <标记...>
     标记结束
    5.布局控件:
     LinearLayout线性布局
    6.简单控件
     TextView、ImageView、Button、EditText、ImageButton
    ===============================
    1204
    布局
    1.LinearLayout
     android:orientation
     LinearLayout下的控件可以属性android:weight
    2.RelativeLayout
     第一个控件不指出位置时,默认在左上角;
     每个控件的位置可以参考其他控件或者RelativeLayout父控件来进行设置(行、列)
    3.TableLayout
     layout:strechColumns=""
     layout:shrinkColumns=""
    
     <控件android:layout_column="".../>设置是第几列
    4.FrameLayout
     所有的控件都自左上角开始设置位置,一般该布局下放置一个控件。
    控件
    RadioButton、RadioGroup、CheckBox
    ========================
    1205
    控件:显示数据(数据是由多项构成)
    数据源:Array,List
    适配器:Adapter
     Adapter
     ListAdapter、SpinnerAdapter
     BaseAdapter
     ArrayAdapter、SimpleAdapter
    Spinner与ListView
    1.Spinner
     只显示一项数据,通过弹出式Dialog从其他数据中选择一项
     android:prompt="@string/xxx"
     android:entries="@array/xxx"(数据源在strings.xml声明,可以不再设置适配器)
     onItemSelectedListener
    2.ListView
     1)activity的layout中声明控件
     2)在layout/创建ListView的一个item所需要的layout文件
     3)初始化数据源
     4)初始化适配器
     5)setAdapter
     onItemClickedListener
     onItemLongClickedListener
    3.Adapter
    1)ArrayAdapter
     构造函数(Context,TextViewResourceId,String[]/List)
     第二个参数:(android.)R.layout.xxx==>在这个layout文件中只有一个控件TextView即可
    2)SimpleAdapter
     数据源:List>
    4.java集合
    1)Collection
     add(),size(),remove(),get()
     List:ArrayList允许元素重复,有序
     Set:HashSet 不允许元素重复,无序
    2)Map:以key+value形式表现数据
     key值不允许重复
     put(),size(),remove(),get(key)==>得到value
     HashMap
    作业:
    1.Spinner年月日
    2.ListView
     1)一个item是一个String
     2
    )一个item是一个Image+String
     3)一个item是两个String
     4)一个item:左Image,右上String(name),右下String(birth)
    ============================
    1206
    1.BaseAdapter
     两个成员:Context,数据源
     Viewview=LayoutInflater.from(context).inflate(R.layout.xxx,null)
     view.findViewById();
    2.GridView
     android:columnWidth
     android:numColumn
     android:horizontalSpacing
     android:verticalSpacing
     android:strechMode
     OnItemClickListener/OnItemLongClickListener
    3.AlertDialog
     DialogInterface.OnClickListener
     newAlertDialog.Builder(context)
     .setTitle()
     .setMessage()/.setView(Viewview)
     .setPositiveButton()
     .setNegitiveButton()
     .create()
     .show()
    练习:
     利用GridView自定义一个菜单
     一行5列,在Activity的最下方(行高100dp)/每一个item上方图片,下方标题
     当GridView单击选中某项时,该选中该项的图片以及标题都显示在Dialog上
    作业:
     搜索一下,如何自定义Dialog
    =======================
    1207
    1.Gallery
     android:spacing
    
    2.ImageSwitcher:为图片切换提供了简单动画效果,使用该控件时必须调用setFactory()方法来构造一个ImageView控件
     setImageResource()
    3.Menu的创建
     1)OptionsMenu通过单击Menu按键出现
     @Override
     onCreateOptionsMenu():设置菜单项
     menu.add().setIcon()
     SubMenusubMenu=menu.addSubMenu()
     onOptionsItemSelected():处理菜单中某个子项被选中后的逻
     辑
     intid=item.getItemId();
     2)ContextMenu通过在控件上长按出现
     @Override
     onCreateContextMenu()
     onContextItemSelected()
     调用registerForContextMenu(Viewview)方法==>为view设置ContextMenu
    4.Activity的创建和启动
     创建:
     i.extendsActivity
     ii.layout/*.xml
     iii.@Override
     onCreate(){
     super.onCreate();
     setContentView(R.layout.*);
     }
     iv.在manifest.xml中注册Activity
     程序运行时抛出ActivityNotFoundException
     启动:
     Intentintent=newIntent(context,XXXActivity.class);
     //传参
     intent.putExtra(Stringname,XXXvalue);
     ......
     startActivity(intent);
     //////////////
     接收通过Intent传递的参数
     IntentrIntent=getIntent();
     XXXvar1=rIntent.getXXXExtra(Stringname);
     XXXvar2=rIntent.getXXXExtra(Stringname,XXXdefaultValue);
    控件:
    1.Button,TextView,ImageView,EditText,ImageButton(按下和默认显示不同图片,xml),RadioButton,RadioGroup,CheckBox
    2.Spinner,ListView,GridView,Gallery
     (ArrayAdapter,SimpleAdapter,BaseAdapter)
    3.ImageSwitcher
    4.Toast,AlertDialog
    作业:
    1.ImageButton(按下和默认显示不同图片,xml)
    2.猜数,当用户猜对后,弹出AlertDialog可以输入用户名字
     MainActivity:publicstaticList
     User:,次数,时间
     单击“查看排行榜”,通过ListView控件显示所有猜对用户的信息(
    排序)
    ======================================================
    1210
    1.Activity的生命周期
     onCreate==>onStart()==>onResume()==>running==>onPause()==>onStop()==>onDestroy()
     注:在这些生命周期方法中必须调用父类的该方法
     onCreate()初始化
     onDestroy()销毁资源:如关闭数据库连接,停止服务,关闭文件等
     onResume()刷新数据或者控件
    2.Activity的其他回调方法
     onBackPressed()//按下返回键
     onKeyDown()//某个按键被按下
    3.数据存储:
     1)SharedPreferences
     项目内部/shared_prefs/*.xml
     有格式的存储简单私有数据:long,int,float,boolean,string
     以key+value形式存储数据
     SharedPreference
     get() //读取数据
     edit()
     SharedPreference.Editor
     put() //写入数据
     commit() //提交写入的数据
     2)InternalStorage
     项目内部/files/*.*
     项目内部存储私有数据
     FileInputStreamfis=openFileInput(name);
     FileOutputStreamfos=openFileOutput(name,mode);
     mode:Context.MODE_PRIVATE,Context.MODE_APPEND
     3)ExternalStorage
     SD卡存储public数据
     4)SQLiteDatabase
     项目内部数据库存储数据
    作业:
    1.使用GridView自定义菜单
    
    2.分别使用InternalStorage和SharedPreferences完成如图登录练习
    =========================
    1211
    ExternalStorage(SD卡)
    1.IO流常用class
     File(文件,目录)
     FileInputStream,FileOutputStream
     FileReader, FileWriter
     BufferedReader(readLine)/BufferedWriter
     InputStreamReader/OutputStreamWriter(字节流==>字符流)
     ByteArrayOutputStream(内存,toByteArray())
     String(getBytes(),getBytes(Stringencode),String(byte[]),String(byte[],encode))
    2.ExternalStorage
     注意:(Environment)
     1)先判断SD卡是否挂载(即sd卡是否可用)MOUNT
     if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
     //.......
     return;
    }
     2)SD卡根位置不要去描述("/mnt/sdcard"),而是通过方法获取
     StringsdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
     3)往SD卡写入数据时,需要给出写入权限(permission)
     android.permission.WRITE_EXTERNAL_STORAGE
    练习:
    User.class:,次数,日期
    UserCountSort.class:implementsComparator按照次数排序
    Activity中,使用ListView显示sd卡guess/user.txt中所有用户信息(按照次数升序显示)
     下方,输入用户名,随机一个次数(1--5),日期是当前日期,单击按钮时,追加到文件末尾
    作业:
    1.猜数
    2.程序运行时显示这是第几次运行,要求次数保存在sd卡上的count.txt
    3.如图,完成备忘录外观
    4.可选题目,如图片
    ============================================
    1212
    1.android_sdk:platform-tools/adb.exe
     配置环境变量:将adb.exe文件所在的路径添加到系统
    的Path
    2.adb管理命令
     1)adbdevices查看设备
     2)adbpush本地文件路径/文件名/sdcard/路径/文件名
     3)adbpull/sdcard/路径/文件名本地文件路径/文件名
     4)adbshell
     进入设备的终端(linux命令)
     ls-l显示
     cd切换目录,其中"cd/"(切换到根目录),cd..(切换到上一级目录)
     rmdir目录名删除空目录
     rm文件名删除文件
     mkdir目录名创建目录
     特殊地:
     sqlite3[数据库名]==>进入SQLite数据库的客户端
     5)adbuninstall包名
     6)adbinstall本地路径/*.apk
    3.SQLite数据库(适用于嵌入式开发的小规模数据库)
     SQL:StructuredQueryLanguage结构化的查询语言
     表Table:存储数据,一行就是一条数据
     基本SQL语句:增,删,改,查
     .tables查看当前库下所有表
     .schema表名查看表结构
     .exit退出SQLite客户端
     1)创建表
     CREATETABLE表名(
     列1定义,
     列2定义,
     ......
     )
     列定义:列名数据类型约束
     数据类型:integer,real,text,blob(大二进制)
     其中text类型的值使用单引号''引起来
     约束:
     primarykey主键约束,要求该列值不能重复而且不能为null(一个表中只能有一个primarykey约束)
     notnull 非空约束,要求该列必须有值
     autoincrement自增长标识列,该列不给出值时系统会自动赋值;要求该约束必须应用在integer并且primarykey列上
     -------------------------------
     check条件表达式,要求该列的值必须满足条件表达式
     default值默认约束,该列不给值,使用默认值
     foreignkey外键约束,约束该列的值只能主表中关联列值,或者该列值为null
     CREATETABLEstudent(
     _idintegerprimarykeyautoincrement,
     nametextnotnull,
     teltext,
     scoreinteger
     );
     2)插入数据
     INSERTINTO表名values(列1值,列2值,...)//每列都要给值,其中autoincrement列可以给值为null
     INSERTINTO表名(列1,列2,...)values(列1值,列2值,...)//按照表名后面的列给值
     3)查看数据
     SELECT列1,列2,...//其实可以使用*代表所有列
     FROM表名
     [where条件表达式] //行过滤条件
     [groupby分组表达式[having组条件表达式]]
     [orderby排序表达式asc|desc] //查询数据时,默认按照主键列升序,asc升序,desc降序
     特殊地:聚合函数
     count(*),count(表达式)
     count(*)统计行数,count(表达式)统计表达式的值不为null的行数
     sum(表达式),avg(表达式)
     max(表达式),min(表达式)
     条件描述:
     逻辑运算符:and,or,not
     关系运算符:>,>=,<,<=,=,!=,<>
     in(值1,值2,...)
     between...and
     字符列like'值':其中描述值时可以使
    用_(匹配1个任意字符)或者%(匹配任意个任意字符)
     select*fromstudentwhere_idin(1,3);
     select*fromstudentwhere_idbetween1and3;
     selectnamefromstudentwherenamelike'%a%';
     selectnamefromstudentwherenamelike'a%';
     selectnamefromstudentwherenamelike'a_';
     selectmax(score),min(score)fromstudent;
     selectcount(*),count(tel)fromstudent;
     4)更新数据update
     UPDATE表名
     SET列名=值,列2名=值,....
     [WHERE条件表达式]
     updatestudentsettel='65656512';
     updatestudentsettel='121212'where_idin(1,3,5,6);
     updatestudentsetscore=60wherescore<60
     updatestudentsetscore=score+10wherescore<=90;
     5)删除数据delete
     DELETEFROM表名[WHERE条件表达式]
     DELETEFROMstudentwherescore<=75;
     6)删除表
     DROPTABLE表名
    4.Android项目中操纵SQLite数据库
     1)extendsSQLiteOpenHelper{
     @Override
     onCreate(SQLiteDatabasedb){
     db.execSQL("建表语句")
     }
     2)调用SQLiteOpenHelper的
     getReadableDatabase()或者getWritableDatabase()
     获取SQLiteDatabase对象
     SQLiteDatabase
     insert()==>long刚插入的数据行id
     update()==>int更新的行数
     delete()==>int删除的行数
     query()==>Cursor
     execSQL()==>void
    ===========================
    1213
    1.Cursor游标
     查询结果集的记录指针,Cursor起初位置在第一条记录之前
     moveXXX(),如moveToNext()==>boolean
     getXXX(intindex)如getString(1)==>String
    ========================================================
    1218
    1.ContentProvider介绍
     数据共享的唯一方式,数据存储在SQLiteDatabase里
     query(tableName,columns,where,where,group,having,order)
    2.访问ContentProvider数据:
     1)tableName==>Uri==>类的常量或者一个字符串常量
     2)columns==>类的常量或者字符串
     3)ContentResolver:insert(),update(),delete(),query()
     getContentResolver()
    3.Uri
     初始化:Uri.parse(StringuriStr)==>Uri
     Uri字符串形式:
     1)协议://资源唯一标识字符串/资源名
     1)协议://资源唯一标识字符串/资源名/id
    4.ContentUris
     ContentProvider中的Uri都遵循"content"协议
     ContentUris.withAppendedId(Uri,id)==>Uri
    5.读取手机上的音频文件
     Audio.Media
     StringalbumUriStr="content://media/external/audio/albumart";
     UrialbumUri=Uri.parse(albumUriStr);
    6.Bitmap
     BitmapFactory.decodeXXX()
    练习:
     读取手机上的图片文件Images.Media
     title,data
     Gallery显示,图片大小满屏
    作业:
     显示sd卡声音文件
     上方ListView:左显示歌曲名字 右显示演唱者
     下方高150dip:
     左显示专辑图片,右上方歌名演唱者
     中间seekbar
     下方seekbar左下方00:00
     seekbar右下方总时间00:00
     下下方:上一首快退暂停/
    继续快进下一首ImageButton,默认显示和按下去使用不同图片
     单击ListView的item,更新下方显示内容
     第一次运行项目,下方所有信息都显示默认信息
     每次运行项目结束时,将本次项目启动过程中左后一首歌曲的路径存在SharedPreferences中
     下次运行项目时,下方显示信息是上次运行时最后一首歌曲信息
    ================================
    1219
    1.读取手机上联系人:READ_CONTACTS
     Contacts
     CONTENT_URI
     _ID,DISPLAY_NAME
     openContactPhotoInputStream()
     Phone
     TYPE,NUMBER
     Phone.CONTACT_ID=id
     Email
     TYPE,DATA
    2.Intent
     借助Intent可以startActvity(),startService(),sendBroadcast()
     Intent分为显式Intnet与隐式Intent:
     显式Intent一般用于启动自定义的Activity;
     隐式Intent需要借助Manifest文件中组件的进行解析
     Intent的组成部分
     1)action==>String setAction()
     2)data==>Uri(Uri.parse(String)) setData()
     3)category==>Activity需要
     Intent.CATEGORY_LAUNCHER
     Integer.CATEGORY_DEFAULT(默认)
     Intent.CATEGORY_HOME
     Intent.CATEGROY_BROWSABLE
     等
     4)extra
     putExtra(),getXXXExtra()
     5)flag
     Intent.FLAG_ACTIVITY_NEW_TASK
     如果在一个BroadcastReceiver中启动Activity,必须给Intent调用addFlag(),而且参数是Intent.FLAG_ACTIVITY_NEW_TASK
    3.Intent传参
     1)Bundle
     2)传递参数是一个自定义class的object,要求该class必须implements接口Serializable或者Parcelable
     i.Serializable接口是一个标识性接口,不含任何抽象方法
     ii.Parcelabel接口:要求实现所有抽象方法,而且必须含有一个Parcelable.Creator类型的静态域,而且名叫CREATOR
    =================================
    1220
    1.Service服务
     1)运行在后台;启动可以通过startService(intent);Service并不单独开启线程
     2)使用:i.耗时任务;ii.Activity不在手机最前端,但是任务还要继续
     3)onCreate()==>反复执行onStartCommand()==>onDestroy()
    注:在Activity中启动Service,即便Activity退出,Service也可以不停止
    2.MediaPlay
     i.staticMediaPlayercreate(intresId)//resId是音频资源的id
     ii.reset(),setDataSource(),prepare()
     iii.start(),pause(),stop(),seekTo(),isPlaying()
     v.release()
     vi.setLooping(),isLooping()
     vii.setOnCompletionListener()监听当前歌曲播放结束
     注意:MediaPlayer的以上方法中,部分方法的调用有先后顺序,不能跳跃
    ============================================
    1225
    android规定:非主线程不允许更新主线程控件外观
     可以通过给主线程Activity的Handler发消息,Handler收到消息后执行更新任务
     Service中如果想更新控件外观,也通过Handler实现
    Handler:
     有两个对列:消息Message队列;任务Runnable队列
     发送消息sendXXXMessage()
     收到消息后执行任
    务
     @Override
     handlerMessage(Messagemsg){
     //判断消息的类别(来源),然后执行相应的任务
     }
     Message:
     初始化:i.newii.handler.obtainMessage()
     四个public成员变量
     intwhat:设置/获取消息类别
     intarg1,arg2:设置/获取整数类型参数
     Objectobj:设置/获取复杂类型参数
    ===================================
    1227
    BroadcastReceiver
    1.Broadcast与BroadcastReceiver
    sendBroadcast(intent)发送广播action==>Receiver接收,action一致
    2.BroadcastReceiver需要注册
     i.manifest.xml中注册(常驻型广播Receiver)
    
    
    
     ii.java代码注册(临时型广播Receiver)
     IntentFilter
     addAction()
     registerReceiver(BroadcastReceiver,IntentFilter)
     unregisterReceiver(BroadcastReceiver);
    3.BroadcastReceiver作用
     Broadcast全局事件
     BroadcastReceiver全局事件监听器及逻辑处理
    4.Broadcast发送方
     i.自己
     ii.系统Broadcast的action
    5.系统服务Manager
     AssetManager(getAssetManager)==>管理项目下assets/
     AlarmManager,NotificationManager
     SmsManager
     TelephonyManager
     获取手机SIM卡相关信息,手机网络制式相关信息,手机呼叫状态等信息。
     getLine1Number()//本机号码
     getSimSerialNumber()
     getCallState()//Idel,Ringing,OffHook(摘机)
    案例:
     BroadcastReceiver
    
    
     先判断action是否是NEW_OUTGOING_CALL
     获取打出号码
     intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
     获取来电号码
     intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
    练习:
     1.当收到短消息时,将短消息的内容以及时间存入sd卡的sms.txt文件中。BroadcastReceiver:android.provider.Telephony.SMS_RECEIVED
     2.如果来电号码是5556,调整为静音
     AudioManager
    =================================
    1228
    1.AlarmManager
     全局闹钟服务,安排某些任务在将来某一时刻执行(如果设置时间是过去时间,则任务马上执行)
     i.set(inttype,longtimeMillions,PendingIntentpendingIntent)
     ii.setRepeat(inttype,longtimeMillions,longinterval,PendingIntentpIntent)
     iii.cancel(PendingIntentpIntent)
     注:cancel()时,PendingIntent的第四个参数flagId一样并且Intent的action一致。
    2.PendingIntent
     包装了Intent,类似于Intent的送货员,包装了Intent的目标组件以及目标组件的位置
     初始化三个static方法选其一,选择依据是Intent要启动的组件类别
     getActivity(Context,int,Intent,int)
     getService()
     getBoroadcast()
     第二个参数int是PendingIntent的requestCode,目前使用0
     第四个参数int是PendingIntent的flag标识id,自定义,建议>0
    3.时
    间相关class
     DategetTime()
     Calendar getTimeInMillions()
     System.currentTimeMillions()
    4.NotificationManager
     notify()[一般是在Receiver中设置]
     cancel()
     Notification
     必须设置三个属性:icon,tickerText,when
     when属性的值一般是System.currentTimeMillions()
     必须调用一个方法:setLatestEventInfo()
     一般设置flags:Notification.FLAG_AUTO_CANCEL
    练习:
     备忘录提醒完成
     如果勾选上"提醒"==>设置提醒,PendingIntent的id使用rowId
     提醒==>发送广播(id,title,content)==>Receiver==>Notification==>单击==>启动详细信息Activity
     删除备忘信息时==>取消提醒
    ================================
    1229
    1.SmsManager发送短信
     权限:SEND_SMS
     staticgetDefault()
     divideMessage()
     sendTextMessage()
     短息发送成功接收Receiver,判断
     if(getResultCode()==Activity.RESULT_OK){}
    2.MediaRecorder录音(参考api)
     权限RECORD_AUDIO
     保存在sd卡上,文件扩展名是amr
    3.VideoView
          android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
    android:screenOrientation="landscape"
     setMediaController(newMediaController(context));
     setVideoPath()
     start()
     stopPlayBack()
    ===========================
    0103
    Internet网络访问
     Browser,输入url==>发出请求Request==>Server 查找资源
     响应请求Response<==
     Request模式:GET与POST
     GET:上传数据和url绑定在一个数据包中,格式为
     url?参数名=值&;参数2=值&;...
     POST:上传的数据和url分别在不同的数据包,上传数据也是需要name/value
    
    1.网络请求
     1)网络访问权限
     2)初始化连接对象
     3)设置网络连接相关参数
     连接时长、读取资源时长、请求方式
     4)连接到网络
     5)如果网络响应代码是200,获取网络数据(网络输入流)
     //2)
     URLurl=newURL(urlStr);
     HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
     //3)
     conn.setConnectTimeout(10*1000);
     conn.setReadTimeout(10*1000);
     conn.setRequestMethod("GET");
     //4)
     conn.connect();
     //5)
     if(200==conn.getResponseCode()){
     InputStreamis=conn.getInputStream();
     //如果请求的资源是文本,可以获取编码
     StringcontentType=conn.getContentType();
     Stringencode=null;
     if(contentType.indexOf('=')>=0){
     encode=contentType.substring(contentType.indexOf('=')+1);
     }
     }
    
    2.网络上数据传输常用两种数据格式:xml与json
     xml文本,在使用pull或者sax方式进行解析时,是基于事件驱动的。
     五种事件:文档开始/结束;标记开始/结束;文本
    3.使用PULL方式解析xml数据
     1)观察xml文档,找出你要的数据;如果数据量小,直接将结果保存进变量;否则需要定义class,保存到对象或者集合
     2)开始解析
     i.初始化XMLPullParser
     ii.设置解
    析源
     iii.获取第一个事件==>文档开始事件
     iv.反复读取后面的每一个事件,找出你要的数据,直到读取到文档结束事件
     while()
    练习:
    1.解析geocoder.xmllat,lng
    2.解析天津的天气信息,
    cnblogs/zhangxin1989/archive/2012/08/29/2661976.html
     flash.weather/wmaps/xml/tianjin.xml
     下载到本地,保存文件名为weather.xml
     然后基于本地sd卡文件进行解析
    Activity下方有个更新按钮,单击按钮重新下载并重新解析
    ===================
    0105
    1.WebView
     1.加载数据
     loadData(String,"text/html","utf-8");
     loadUrl(url);
     2.设置支持JS,Zoom
     webView.getSettings().setSupportZoom(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setJavaScriptEnabled(true);
     3.设置进度条
     4.设置web内容在当前WebView中显示
     5.设置“返回”按键的动作是退回历史记录
     6.设置当前WebView所在的Activity是浏览器
     manifest.xml
     7.获取应用程序外部传递的url
     getIntent().getData().toString()
    2.TextView内容设置为超级连接
    Stringurl="网址";
    Stringshow="TextView所显示的文字";
    tv.setText(Html.fromHtml(""+show+""));
    tv.setMovementMethod(LinkMovementMethod.getInstance());
    作业:
    1.练习一下WebView的使用
    2.设置TextView的文字滚动
    =========================
    0109
    1.GestureListener手势监听
     1)extendsActivityimplementsOnGestureListener{
     privateGestureDetectorgesture;
     @Override
     onTouchEvent(MotionEventev){
     returngesture.onTouchEvent(ev);
     }
     //onGestureListener应该实现的抽象方法
     @Override
     onFling(MotionEvente1,MotionEvente2,....){
     左右滑动的判定:e1和e2的x值之差
     x1-x2>距离==>自右向左
     x2-x1>距离==>自左向右
     }
     2)extendsViewimplementsOnGestureListener{
     privateGestureDetectorgesture;
     @Override
     onTouch(MotionEventevent){
     returngesture.onTouchEvent(event);
     }
     @Override
     dispatchTouchEvent(MotionEventev){
     if(gesture.onTouchEvent(ev)){
     ev.setAction(MotionEvent.ACTION_CANCEL);
     }
     returnsuper.dispatchTouchEvent(ev);
     };
     //onGestureListener应该实现的抽象方法
     @Override
     onFling(MotionEvente1,MotionEvente2,....){
     左右滑动的判定:e1和e2的x值之差
     x1-x2>距离==>自右向左
     x2-x1>距离==>自左向右
     }
     }
    2.项目中添加sdk以外的其他类库:
     i.项目中创建一个文件夹,命名为libs
     ii.将第三方jar文件拷贝到libs中
     iii.选中该jar文件,右键:BuildPath==>AddtobuildPath
     然后该jar包中的class就可以在项目中被使用
    3.ViewPager内置有手势左右方向滑动的View切换处理
     1)需要android-support-v4.jar
     2)layout中声明控件
         Pager.../>
     3)适配器:
     extendsPageAdapter
     *成员变量:Context,List
     *还要重写两个方法:instantiateItem(),destroyItem()
     4)准备数据源List
     //添加layout:控件不需要监听器;添加Activity
     data.add(LayoutInflater.from(this).inflate(R.layout.page1,null));
     LocalActivityManageractivityMan=newLocalActivityManager(this,true);
    activityMan.dispatchCreate(savedInstanceState);
    ViewpageView2=activityMan.startActivity("page2",newIntent(this,Page2.class)).getDecorView();
    data.add(pageView2);
     5)viewPager.setAdapter(adapter)
     6)ViewPager监听器setOnPageChangeListener
    =======================
    0110
    1.AppWidget创建步骤
     1)layout/*.xml
     描述AppWidget外观
     2)定义一个classextendsAppWidgetProvider
     3)res/xml/*.xml==>AppWidgetProviderInfo
     描述AppWidget的元数据
     4)manifest.xml注册AppWidget
    
    
    
    

        android:name="android.appwidget.provider"
    android:resource="@xml/providerinfo"/>
    

    2.AppWidget中控件所显示数据的更新,或者控件添加监听器的实现
     RemoteViews
     AppWidagetManager
     AppWidgetManagerappMan=AppWidgetManager.getInstance(context);
     //只更新一个AppWidget
     appMan.updateAppWidget(appId,views);
    
     //更新所有AppWidget
     ComponentNamecomName=newComponentName(context,MyAppWidget.class);
     appMan.updateAppWidget(comName,views);
    3.AppWidget的配置信息Activity
     1)创建一个Activity,manifest.xml注册时
    
    
    

     2)AppWidgetProviderInfo的xml文件中添加
     android:configure="包名.Activity名字"
     3)
     i.获取AppWidget的ID
     //获取要安装的AppWidget的Id
    Bundlebundle=getIntent().getExtras();
    if(bundle!=null){
     appId=bundle.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,-1);
    }
    if(appId==-1){
     return;
    }
     ii.执行逻辑处理
     ....
     更新AppWidget
     设置返回信息
     IntentresultIntent=newIntent();
     resultIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appId);
     setResult(RESULT_OK,resultIntent);
     关闭当前Activity
     finish();
    ===================
    AlarmManager,TelephonyManager,SmsManager,AssetManager,AppWidgetManager,AudioManager
    0114
    位置服务LocationManager与Location,经纬度
    1.LocationProvider
     GPS:精确度高,耗电量大,流量低
     NETWORK:精确度低,耗电量小,流量高
    2.Location
     getLongitude()getLatitude()
    3.LocationListener
    4.LocationManager
     requestLocationUpdate();
    5.Baidu
    控件MapView
     developer.baidu/map/sdk-android.htm
     1)添加第三方包
     2)权限
     3)
     4)extendsMapActivity{
     privateBMapManagerbMapMan;
     privateMapViewmapView;
     privateMapViewControllercontroller;
     @Override
     onCreate(){
     bMapMan=newBMapManager(this);
     bMapMan.init(mapKey,null);
     super.initMapActivity(bMapMan);
     }
     .....
     bMapMan.start()
     bMapMan.stop()
     bMapMan.destroy()
     5)GeoPoint需要经纬度*1E6
     6)MapViewController
     setCenter() //一次
     animateTo()//移动到新的定位位置
    6.在地图上增加标识
     1)extendsOverlay{
     @Override
     draw()
     }
     2)
     mapView.getOverlays().add(YourOverlayObject)
    
    作业:
    1.在MapView上显示上一次的位置,并增加一张图片标识出该位置;
    当用户的位置发生改变时,重新在MapView定位该位置。
    ======================
    0115
    1.json数据解析
     JSONObject与JSONArray
     获取数据第一个对象或者数组,参数是json数据构成的String
     json原始数据:"{}"==>对象,"[]"==>数组
     "属性名":"属性值"(int,double,long值可以不使用"")
    2.地址解析与反向解析
     地址<==>经纬度
    developer.baidu/map/geocoding-api.htm
    作业:
    1.昨天练习,增加位置自定义搜索
    2.天气预报,使用json格式数据解析天津天气
    =======================================
    1.Android中的Animation动画:
     1)tweenedanimation渐变动画,对场景中图像等做不同的变化处理
     2)frame-by-frameanimation逐帧动画,按照顺序播放预先做好的动画帧
    2.tweenedanimation
     1)四种:alpha,translate,scale,rotate
     2)Animation类是四种动画class的基类,还有一个派生类是AnimationSet
     3)声明:
     i.java代码
     AlphaAnimation,TranslateAnimation,ScaleAnimation,RotateAnimation
     ii.xml中声明
     /res/anim/*.xml
    
    
    
    
    
    
    
     注意:android:fillAfter="true"写在set下面,其他属性写在动画自己内部
     android:pivotX,android:pivotY属性值:
     整数==>绝对定位
     ?%==>相对自身定位
     ?%p==>相对parent定位
     translate动画:android:fromXDelta,android:toXDelta,android:fromYDelta,android:toYDelta属性值写法同上
     java代码加载动画
     Animationanimation=AnimationUtils.loadAnimation(Context,R.anim.?);
     4)所有动画通用效果设置
     setDuration()时长
     setFillAfter(true)动画播放结束后停留在结束点
     setFillBefore(true)动画播放结束后停留在开始点
     setRepeatCount()动画重复播放的次数
     setStartOffset()动画播放时间的相对偏移量
     setInterpolator()
     5)控件加载动画
     setAnimation()
     startAnimation()
     6)AnimationSet
     AnimationSet可以包含多个Animation,但都是在同一个时间执行的,是并行,不是串行执行的。
    如果AnimationSet中有一些设定,如duration,fillBefore等,它包含的子动作也设定了的话,
    子动作中的设定将会给覆盖掉。
     7)动作特效:
     Interpolator定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等
     共5中,Interpolater是这些速度变化class的基类
     AccelerateDecelerateInterpolator,延迟减速,在动作执行到中间的时候才执行该特效。
     AccelerateInterpolator,会使慢慢以(float)的参数降低速度。
     LinearInterpolator,平稳不变的
     DecelerateInterpolator,在中间加速,两头慢。
     CycleInterpolator,曲线运动特效,要传递float型的参数。
    2.LayoutAnimationController
     1)为layout中的控件或者ViewGroup加载动画效果,实现方式两种
     2)xml中实现(/res/anim/*.xml)
     i.设置View中item的Animation
     ii.设置View的layoutAnimation
          android:delay=""秒
     android:animationOrder=""normal,random,reverse
     android:animation="@anim/?"
     />
     iii.控件加载layoutAnimation
     android:layoutAnimation="@anim/?"
     3)在java代码中实现
     i.加载item的Animation
     Animationanimation=AnimationUtils.loadAnimation();
     ii.创建LayoutAnimationController
     LayoutAnimationControllerlac=newLayoutAnimationController(animation);
     iii.设置LayoutAnimationController的属性
     lac.setDelay()
     lac.setOrder(intorder)LayoutAnimationController.XXX
     iv.控件加载layoutAnimation
     view.setLayoutAnimation(lac);
    3.Activity切换效果的实现
     使用Activity的方法overridePendingIntentTransition()
     注意:该方法调用时必须在startActivity()或者startActivityForResult()或者finish()调用之后
    4.使用AnimationDrawable实现Frame-by-FrameAnimation
     在/res/drawable/*.xml
          android:oneshot="boolean"
     >
    
    
     ...
    
    
     控件加载动画
     iv.setBackGroundResource(R.drawable.?);
     AnimationDrawableanimDraw=(AnimationDrawable)iv.getBackGroud();
     animDraw.start();
     animDraw.stop();
    练习:四种动画设置
    TabHost,OnGestureListener
    ViewPager
    ViewFlipper可以加载多个View,通过事件触发实现View切换,提供了切换时动画设置
     利用ViewFlipper实现手指滑动切换View,并且添加切换时动画效果
     addView(Viewview)
     View来自Layout的xml;来自Activity
    
    

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号