




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
安卓應用總結一、Activity類1、生命周期Android定義了一系列與生命周期相關的方法,在我們自己的Activity中,只是根據需要復寫需要的方法,Java的多態性會保證我們自己的方法被虛擬機調用(即回調方法)。publicclassOurActivityextendsActivity(protectedvoidonCreate(BundlesavedInstanceState);setContentView(R.layout.main);/設置界面布局protectedvoidonStart();//啟動protectedvoidonResume();//進入界面之前protectedvoidonPause();protectedvoidonStop();protectedvoidonDestroy();}onCreate==>onStart()==>onResume()==>running==>onPause()==>onStop()==>onDestroy()注:在這些生命周期方法中必須調用父類的該方法2、啟動另外一個ActivityActivity.startA的電)()方法可以根據傳入的參數啟動另外一個Activity:Intentintent=newIntent(CurrentActivity.this,OtherActivity.class);startActivity(intent);注:OtherActivity同樣需要在AndroidManifest.xml中定義3、Activity之間通信在Android中,不同的Activity實例可能運行在一個進程中,也可能運行在不同的進程中。因此我們需要一種特別的機制幫助我們在Activity之間傳遞消息。Android中通過Intent對象來表示一條消息,一個Intent對象不僅包含有這個消息的目的地,還可以包含消息的內容,這好比一封Email,其中不僅應該包含收件地址,還可以包含具體的內容。對于一個Intent對象,消息“目的地”是必須的,而內容則是可選項。Intent的中文意思是目的。在Android中也是"目的”的意思。就是我們要去哪里,從這個activity要前往另一個Activity就需要用到Intent。發件人:(CurrentActivity類中)Intentintent=newIntent(CurrentActivity.this,OtherActivity.class);//創建一個帶“收件人地址”的emailBundlebundle=newBundle();//創建email內容bundle.putBoolean(〃boolean_key〃,true);//編寫內容bundle.putString(〃string_key〃,〃string_value〃);intent.putExtra(〃key〃,bundle);//封裝emailstartActivity(intent);//啟動新的Activity收件人:(OtherActivity類中)Intentintent=getIntent();//收取email
Bundlebundle=intent.getBundleExtra(〃key〃);//打開emailbundle.getBoolean(〃boolean_key〃);//讀取內容bundle.getString(〃string_key〃);使用SharedPreferencesSharedPreferences使用xml格式為Android應用提供一種永久的數據存貯方式。對于一個Android應用,它存貯在文件系統的/data/data/your_app_package_name/shared_prefs/目錄下,可以被處在同一個應用中的所有Activity訪問。Android提供了相關的API來處理這些數據而不需要程序員直接操作這些文件或者考慮數據同步問題。//寫入SharedPreferencesSharedPreferencespreferences=getSharedPreferences(〃name〃,MODE_PRIVATE);Editoreditor=preferences.edit();editor.putBoolean(〃boolean_key〃,true);editor.putString(〃string_key〃,〃string_value〃);mit();//讀取SharedPreferencesSharedPreferencespreferences=getSharedPreferences(〃name〃,MODE_PRIVATE);preferences.getBoolean(〃boolean_key〃,false);preferences.getString(〃string_key〃,〃default_value〃);4、Activity的IntentFilterIntentFilter描述了一個組件愿意接收什么樣的Intent對象,Android將其抽象為android.content.IntentFilter類。在Android的AndroidManifest.xml配置文件中可以通過<intent-filter>節點為一個Activity指定其IntentFilter,以便告訴系統該Activity可以響應什么類型的Intento當程序員使用startActivity(intent)來啟動另外一個Activity時,如果直接指定intent了對象的Component屬性,那么ActivityManager將試圖啟動其Component屬性指定的Activity。否則Android將通過Intent的其它屬性從安裝在系統中的所有Activity中查找與之最匹配的一個啟動,如果沒有找到合適的Activity,應用程序會得到一個系統拋出的異常。①Action匹配Action是一個用戶定義的字符串,用于描述一個Android應用程序組件,一個IntentFilter可以包含多個Actiono在AndroidManifest.xml的Activity定義時可以在其<intent-filter>節點指定一個Action列表用于標示Activity所能接受的“動作”,例如:〈intent-filter><actionandroid:name=〃ent.action.MAIN〃/><actionandroid:name=〃com.zy.myaction〃/></intent-filter>如果我們在啟動一個Activity時使用這樣的Intent對象:Intentintent=newIntent();intent.setAction(〃com.zy.myaction〃);那么所有的Action列表中包含了“com.zy.myaction”的Activity都將會匹配成功。Android預定義了一系列的Action分別表示特定的系統動作。這些Action通過常量的方式定義在android.content.Intent中,以“ACTION_”開頭。我們可以在Android提供的文檔中找到它們的詳細說明。一URI數據匹配一個Intent可以通過URI攜帶外部數據給目標組件。在<intent-filter>節點中,通過<data/>節點匹配外部數據。mimeType屬性指定攜帶外部數據的數據類型,scheme指定協議,host、port、path指定數據的位置、端口、和路徑。如下:<dataandroid:mimeType=〃mimeType〃android:scheme=〃scheme〃android:host=〃host〃android:port=〃port〃android:path=〃path〃/>如果在IntentFilter中指定了這些屬性,那么只有所有的屬性都匹配成功時URI數據匹配才會成功。Category類別匹配〈intent-filter>節點中可以為組件定義一個Category類別列表,當Intent中包含這個列表的所有項目時Category類別匹配才會成功。5、一些關于Activity的技巧①鎖定Activity運行時的屏幕方向Android內置了方向感應器的支持。在G1中,Android會根據G1所處的方向自動在豎屏和橫屏間切換。但是有時我們的應用程序僅能在橫屏/豎屏時運行,比如某些游戲,此時我們需要鎖定該Activity運行時的屏幕方向,<activity>節點的android:screenOrientation屬性可以完成該項任務,示例代碼如下:<activityandroid:name=〃.EX01〃android:label=〃@string/app_name〃android:screenOrientation=〃portrait〃〉//豎屏,值為landscape時為橫屏</activity>全屏的Activity要使一個Activity全屏運行,可以在其onCreate()方法中添加如下代碼實現://設置全屏模式getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//去除標題欄requestWindowFeature(Window.FEATURE_NO_TITLE);在Activity的Title中加入進度條為了更友好的用戶體驗,在處理一些需要花費較長時間的任務時可以使用一個進度條來提示用戶“不要著急,我們正在努力的完成你交給的任務”。如下圖:在Activity的標題欄中顯示進度條不失為一個好辦法,下面是實現代碼://不明確進度條requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);setContentView(R.layout.main);setProgressBarlndeterminateVisibility(true);//明確進度條requestWindowFeature(Window.FEATURE_PROGRESS);setContentView(R.layout.main);setProgress(5000);二、布局幾種布局方式:View的布局顯示方式有下面幾種:線性布局(LinearLayout)、相對布局(RelativeLayout)、表格布局(TableLayout)、網格視圖(GridView)、標簽布局(TabLayout)、列表視圖(ListView)、絕對布局(AbsoluteLayout)幀布局(FrameLayout)。語:布局相對比較簡單,這里不再詳細介紹。三、控件的使用1、ListView、Spinner、GridView與GalleryListView和Gallery,Spinner有一個共同點:它們都是AdapterView的子類。AdapterView的顯示可以通過數據綁定來實現,數據源可以是數組或是數據庫記錄,數據源和AdapterView是通過Adapter作為橋梁。通過Adapter,AdatperView可以顯示數據源或處理用戶選取事件適配器有:BaseAdapter(較常用)、ArrayAdapter、SimpleAdapter加載數據的步驟activity的layout中聲明控件在layout/創建ListView的一個item所需要的layout文件初始化數據源初始化適配器setAdapter各自實現的監聽ListView:onItemClickedListeneronItemLongClickedListenerSpinner:(只顯示一項數據,通過彈出式Dialog從其他數據中選擇一項)onItemSelectedListenerGridView:android:columnWidthandroid:numColumnandroid:strechModeandroid:horizontalSpacingandroid:verticalSpacingOnItemClickListener/OnItemLongClickListener2、ImageSwitcher為圖片切換提供了簡單動畫效果,使用該控件時必須調用setFactory()方法來構造一個ImageView控件setImageResource()3、AlertDialogDialogInterface.OnClickListener創建:newAlertDialog.Builder(context).setTitle().setMessage()/.setView(View
view).setPositiveButton().setNegitiveButton().create().show()4、Menu的創建OptionsMenu通過單擊Menu按鍵出現?OverrideonCreateOptionsMenu():設置菜單項menu.add().setIcon()SubMenusubMenu=menu.addSubMenu()onOptionsItemSelected():處理菜單中某個子項被選中后的邏輯intid=item.getItemId();ContextMenu通過在控件上長按出現?OverrideonCreateContextMenu()onContextItemSelected()調用registerForContextMenu(Viewview)方法==>為view設置ContextMenu四、其他1、數據存儲SharedPreferences項目內部/shared_prefs/*.xml有格式的存儲簡單私有數據:long,int,float,boolean,string以key+value形式存儲數據SharedPreferenceget()//讀取數據edit()//編輯SharedPreference.Editorput()//寫入數據commit()//提交寫入的數據InternalStorage項目內部/files/*.*項目內部存儲私有數據FileInputStreamfis=openFileInput(name);FileOutputStreamfos=openFileOutput(name,mode);mode:Context.MODE_PRIVATE,Context.MODE_APPENDExternalStorageSD卡存儲public數據IO流常用classFile(文件,目錄)FileInputStream,FileOutputStreamFileReader,FileWriterBufferedReader(readLine)/BufferedWriterInputStreamReader/OutputStreamWriter字節流==>字符流)ByteArrayOutputStream(內存,toByteArray())String(getBytes(),getBytes(Stringencode),String(byte[]),String(byte[],encode))
ExternalStorage注意:(Environment)先判斷SD卡是否掛載(即sd卡是否可用)MOUNTif(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED){//return;}SD卡根位置不要去描述("/mnt/sdcard"),而是通過方法獲取StringsdPath=Environment.getExternalStorageDirectory().getAbsolutePath();往SD卡寫入數據時,需要給出寫入權限(permission)android.permission.WRITE_EXTERNAL_STORAGE④SQLiteDatabase(SQLite數據庫(適用于嵌入式開發的小規模數據庫))SQL:StructuredQueryLanguage結構化的查詢語言表Table:存儲數據,一行就是一條數據基本SQL語句:增,刪,改,查.sqlite3進入數據庫客戶端.tables查看當前庫下所有表.schema表名查看表結構.exit退出SQLite客戶端1)創建表CREATETABLE表名(列1定義,列2定義,)列定義:列名數據類型約束數據類型:integer,real,text,blob(大二進制)其中text類型的值使用單引號''引起來約束:primarykey主鍵約束,要求該列值不能重復而且不能為null(一個表中只能有一個primarykey約束)notnull非空約束,要求該列必須有值autoincrement自增長標識列,該列不給出值時系統會自動賦值;要求該約束必須應用在integer并且primarykey歹U上check條件表達式,要求該列的值必須滿足條件表達式default值默認約束,該列不給值,使用默認值foreignkey外鍵約束,約束該列的值只能主表中關聯列值,或者該列值為nullEg:CREATETABLEstudent(_idintegerprimarykeyautoincrement,nametextnotnull,teltext,scoreinteger);插入數據INSERTINTO表名values(列1值,列2值,...)//每列都要給值,其中autoincrement列可以給值為nullINSERTINTO表名(列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%';selectnamefromstudentwherenamelikeJJa;selectmax(score),min(score)fromstudent;selectcount(*),count(tel)fromstudent;4)更新數據updateUPDATE表名SET列名=值,列2名=值,[WHERE條件表達式]updatestudentsettel='65656512';updatestudentsettel='121212'where_idin(1,3,5,6);updatestudentsetscore=60wherescore<60updatestudentsetscore=score+10wherescore<=90;刪除數據deleteDELETEFROM表名[WHERE條件表達式]DELETEFROMstudentwherescore<=75;刪除表DROPTABLE表名Android項目中操縱SQLite數據庫extendsSQLiteOpenHelper(?OverrideonCreate(SQLiteDatabasedb)(db.execSQL("建表語句〃)調用SQLiteOpenHelper的getReadableDatabase()或者getWritableDatabase()獲取SQLiteDatabase對象SQLiteDatabaseinsert()==>long剛插入的數據行idupdate()==>int更新的行數delete()==>int刪除的行數query()==>CursorexecSQL()==>voidCursor游標查詢結果集的記錄指針,Cursor起初位置在第一條記錄之前moveXXX(),如moveToNext()==>booleangetXXX(intindex)如getString(1)==>String2、ContentProvider敬據共享的唯一方式,數據存儲在SQLiteDatabase里)query(tableName,columns,where,where,group,having,order)訪問ContentProvider數據:tableName==>Uri==>類的常量或者一個字符串常量columns==>類的常量或者字符串ContentResolver:insert(),update(),delete(),query()getContentResolver()Uri初始化:Uri,parse(StringuriStr)==>UriUri字符串形式:1)協議:〃資源唯一標識字符串/資源名1)協議:〃資源唯一標識字符串/資源名/idContentUrisContentProvider中的Uri都遵循"content"協議ContentUris.withAppendedId(Uri,id)==>Uri3、Intent、Broadcast①Intent借助Intent可以startActvity(),startService(),sendBroadcast()Intent分為顯式Intnet與隱式Intent:顯式Intent一般用于啟動自定義的Activity;隱式Intent需要借助Manifest文件中組件的<intent-filter>進行解析Intent的組成部分action==>StringsetAction()data==>Uri(Uri.parse(String))setData()category==>Activity需要Intent.CATEGORY_LAUNCHERInteger.CATEGORY_DEFAULT(默認)Intent.CATEGORY_HOMEIntent.CATEGROY_BROWSABLEextraputExtra(),getXXXExtra()flagIntent.FLAG_ACTIVITY_NEW_TASK如果在一個BroadcastReceiver中啟動Activity,必須給Intent調用addFlag(),而且參數是IntentFLAG_ACTIVITY_NEW_TASKIntent傳參Bundle傳遞參數是一個自定義class的object,要求該class必須implements接口Serializable或者ParcelableSerializable接口是一個標識性接口,不含任何抽象方法Parcelabel接口:要求實現所有抽象方法,而且必須含有一個Parcelable.Creator類型的靜態域,而且名叫CREATOR]②Broadcast與BroadcastReceiversendBroadcast(intent)發送廣播action==>Receiver接收,action一致BroadcastReceiver需要注冊manifest.xml中注冊(常駐型廣播Receiver)<receiver><intent-filter><actionandroid:name="能收到的廣播〃/>java代碼注冊(臨時型廣播Receiver)IntentFilteraddAction()registerReceiver(BroadcastReceiver,IntentFilter)unregisterReceiver(BroadcastReceiver);BroadcastReceiver作用:Broadcast全局事件BroadcastReceiver全局事件監聽器及邏輯處理Broadcast發送方自己系統Broadcast的action4、Service服務運行在后臺;啟動可以通過startService(intent);Service并不單獨開啟線程使用:i,耗時任務;ii.Activity不在手機最前端,但是任務還要繼續onCreate()==>反復執行onStartCommand()==>onDestroy()注:在Activity中啟動Service,即便Activity退出,Service也可以不停止5、AlarmManager、NotificationManagerAlarmManager,TlephonyManager,SmsManager,AssetManager,AppWidgetManager,AudioManager①系統服務ManagerAssetManager(getAssetManager)==>管理項目下assets/AlarmManager,NotificationManagerSmsManagerTelephonyManager獲取手機SIM卡相關信息,手機網絡制式相關信息,手機呼叫狀態等信息。
getLine1Number()//本機號碼getSimSerialNumber()getCallState()//Idel,Ringing,OffHook(摘機)案例:BroadcastReceiver<actionandroid:name=〃ent.action.PHONE_STATE〃/><actionandroid:name=〃ent.action.NEW_OUTGOING_CALL〃/>先判斷action是否是NEW_OUTGOING_CALL獲取打出號碼intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);獲取來電號碼intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);②AlarmManager全局鬧鐘服務,安排某些任務在將來某一時刻執行(如果設置時間是過去時間,則任務馬上執行)set(inttype,longtimeMillions,PendingIntentpendingIntent)setRepeat(inttype,longtimeMillions,longinterval,PendingIntentpIntent)cancel(PendingIntentpIntent)注:cancel()時,PendingIntent的第四個參數flagId一樣并且Intent的action一致。PendingIntent包裝了Intent,類似于Intent的送貨員,包裝了Intent的目標組件以及目標組件的位置初始化三個static方法選其一,選擇依據是Intent要啟動的組件類別getActivity(Context,int,Intent,int)getService()getBoroadcast()第二個參數int是PendingIntent的requestCode,目前使用0第四個參數int是PendingIntent的flag標識id,自定義,建議>0NotificationManagernotify()[一般是在Receiver中設置]cancel()Notification必須設置三個屬性:icon,tickerText,whenwhen屬性的值一般是System.currentTimeMillions()必須調用一個方法:setLatestEventInfo()一般設置flags:Notification.FLAG_AUTO_CANCEL時間相關class:DategetTime()CalendargetTimeInMillions()System.currentTimeMillions()⑤SmsManager發送短信權限:SEND_SMSstaticgetDefault()divideMessage()sendTextMessage()
短息發送成功接收Receiver,判斷if(getResultCode()==Activity.RESULT_OK)()AudioManager簡介在程序獲取了AudioManager對象之后,接下來就可調用AudioManager的如下常用方法:adjustStreamVolume(intstreamType,intdirection,intflags):調整手機指定類型的聲音。其中第-個參數streamType指定聲音類型,該參數可接受如下幾個值,STHEAMLALARM;手機鬧鈴的聲音.STREAM_DTMF;DTMF音調的聲吊STREAM_MUSIC:手機音樂的聲音。?STREAM_NOTIF1CATION:系統提示的聲音。STREAM_RING:電話鈴聲的聲音。STREAM_SYSTEM:手機系統的聲音’STREAM_VO1CE_CALL:語音電話的聲音。第二個參數指定對聲音進行增大、還是減少;第三個參數是調整聲音時的標志,例如指定FLAG_SHOW_Ub購指定調整聲音時顯示音量進度條。ad|ustStreamVolume(intstreamType,intdirection,intflags):調整手機指定類型的聲音。其中第-個參數streamType指定聲音類型?該參數可接受如下幾個值。STREAM_ALARM;手機鬧鈴的聲音*STREAM_DTMF;DTMF音調的聲音?STREAM_MUSIC:手機音樂的聲音。STREAM_NOTIF1CATION:系統提示的聲音。STREAM_RING:電話鈴聲的聲音。STREAM^SYSTEM:手機系統的聲音,STREAM_VO1CE_CALL:語音電話的聲音。第二個參數指定對聲?首進行增大、還是減少:第三個參數是調整聲音時的標志,例如指定FLAG_SHOW_Ub購指定調整聲音時顯示音量進度條。LocationManager位置服務LocationManager與Location經緯度LocationProviderGPS:精確度高,耗電量大,流量低NETWORK:精確度低,耗電量小,流量高LocationgetLongitude()經度getLatitude()緯度LocationListenerLocationManagerrequestLocationUpdate();Baidu控件MaPView/map/sdk-android.htm添加第三方包權限<com.baidu.mapapi.MapView...android:clickable="true”/>extendsMapActivity(privateBMapManagerbMapMan;privateMapViewmapView;privateMapViewControllercontroller;?OverrideonCreate()(bMapMan=newBMapManager(this);bMapMan.init(mapKey,null);super.initMapActivity(bMapMan);}bMapMan.start()bMapMan.stop()bMapMan.destroy()GeoPoint需要經緯度*1E6MapViewControllersetCenter()//一次animateTo()//移動到新的定位位置6.在地圖上增加標識extendsOverlay(?Overridedraw()}2)mapView.getOverlays().add(YburOverlayObject)6、多媒體技術MediaPlaystaticMediaPlayercreate(intresId)//resIc是音頻資源的idreset(),setDataSource(),prepare()start(),pause(),stop(),seekTo(),isPlaying()release()setLooping(),isLooping()setOnCompletionListener()監聽當前歌曲播放結束注意:MediaPlayer的以上方法中,部分方法的調用有先后順序,不能跳躍讀取手機上的音頻文件Audio.MediaStringalbumUriStr=〃content://media/external/audio/albumart〃;UrialbumUri=Uri.parse(albumUriStr);MediaRecorder錄音(參考api)權限RECORD_AUDIO保存在sd卡上,文件擴展名是amrVideoView<activityandroid:theme=〃@android:style/Theme.Black.NoTitleBar.Fullscreen〃android:screenOrientation=〃landscape〃
setMediaController(newMediaController(context));setVideoPath()start()stopPlayBack()7、Handlerandroid規定:非主線程不允許更新主線程控件外觀可以通過給主線程Activity的Handler發消息,Handler收到消息后執行更新任務Service中如果想更新控件外觀,也通過Handler實現Handler:有兩個對列:消息Message隊列;任務Runnable隊列發送消息sendXXXMessage()收到消息后執行任務?OverridehandlerMessage(Messagemsg)(//判斷消息的類別(來源),然后執行相應的任務}Message:初始化:i.newii.handler.obtainMessage()四個public成員變量:intwhat:設置/獲取消息類別intarg1,arg2:設置/獲取整數類型參數Objectobj:設置/獲取復雜類型參數8、Internet網絡訪問Browsei,輸入url==>發出請求Request==>Server查找資源響應請求Response<==Request模式:GET與POSTGET:上傳數據和url綁定在一個數據包中,格式為url?#數名=值&參數2=值&...POST:上傳的數據和url分別在不同的數據包,上傳數據也是需要name/value網絡請求步驟網絡訪問權限初始化連接對象設置網絡連接相關參數連接時長、讀取資源時長、請求方式連接到網絡如果網絡響應代碼是200,獲取網絡數據(網絡輸入流)Eg://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);}}網絡上數據傳輸常用兩種數據格式:xml與jsonxml文本,在使用pull或者sax方式進行解析時,是基于事件驅動的。五種事件:文檔開始/結束;標記開始/結束;文本使用PULL方式解析xml數據觀察xml文檔,找出你要的數據;如果數據量小,直接將結果保存進變量;否則需要定義class,保存到對象或者集合開始解析初始化XMLPullParser設置解析源獲取第一個事件==>文檔開始事件反復讀取后面的每一個事件,找出你要的數據,直到讀取到文檔結束事件while()SAX解析SAX是一種速度更快,更有效的方法。它逐行掃描文檔,一邊掃描一邊解析。而且相比于DOM,SAX可以在解析文檔的任意時刻停止解析,但任SAX的工作原理由融林SAX,它既是一個接口,也是一個軟件包.但作為接口,SAX是事件驅動型析的一個標準接口不會改變SAX的工作原理簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、文檔(document)結束等地方時通知事件處理函數,由事件處理函數做相應動作,然后繼續同樣的掃描,直至文檔結束。大多數SAX都會產生以下類型的事件:1.在文檔的開始和結束時觸發文檔處理事件。在文檔內每一XM頃素接受解析的前后觸發元素事件。3.任何元數據通常由單獨的事件處理何事物都有其相反的一面,對于命繇域說就是操作復雜。對于解析過程中的每一步都會有事件發生,都會觸發相應接口中的事件處理程序。編寫程序的^^:通知主機應用程序解析錯誤。(1).創建事件處理程序(也就是編寫ContentHandler的實現類,一般繼承自DefaultHandler類,采用adapter模式)
.創建SAX解析器.將事件處理程序分配到解析器.對文檔進行解析,將每個事件發送給事件處理程序SAX模型過程:首先SAXParserFactory來創建一個SAXParserFacto書?例SAXParserFactoryfactory二SAXParserFactory.newInstancef);根據SAXParserFactory^例來創建SAXParserS.SAXParserj^生SAXR的如rXMLReaderreader=factory.newSAXParserQ.getXMLReaderO;4.XMLReader加載XML,然后解析XML,在解析的過程中觸發相對于接口中的事件處理程序9、WebView加載數據loadData(String,〃text/html〃,〃utf-8〃);loadUrl(url);設置支持JS,ZoomwebView.getSettings().setSupportZoom(true);webView.getSettings().setBuiltInZoomControls(true);webView.getSettings().setJavaScriptEnabled(true);設置進度條設置web內容在當前WebView中顯示設置“返回”按鍵的動作是退回歷史記錄設置當前WebView所在的Activity是瀏覽器manifest.xml獲取應用程序外部傳遞的urlgetIntent().getData().toString()TextView內容設置為超級連接:Stringurl=〃網址〃;Stringshow="TextView所顯示的文字〃;tv.setText(Html.fromHtml(〃<ahref=\〃〃+url+〃\〃>〃+show+〃</a>〃));tv.setMovementMethod(LinkMovementMethod.getInstance());10、OnGestureListener手勢監聽1)extendsActivityimplementsOnGestureListener(privateGestureDetectorgesture;
?OverrideonTouchEvent(MotionEventev)(returngesture.onTouchEvent(ev);}//onGestureListener應該實現的抽象方法?OverrideonFling(MotionEventel,MotionEvente2,)(左右滑動的判定:el和e2的x值之差xl-x2>距離==>自右向左x2-xl>距離==>自左向右}extendsViewimplementsOnGestureListener(privateGestureDetectorgesture;?OverrideonTouch(MotionEventevent)(returngesture.onTouchEvent(event);}?OverridedispatchTouchEvent(MotionEventev)(if(gesture.onTouchEvent(ev))(ev.setAction(MotionEvent.ACTION_CANCEL);}returnsuper.dispatchTouchEvent(ev);};//onGestureListener應該實現的抽象方法?OverrideonFling(MotionEventel,MotionEvente2,)(左右滑動的判定:el和e2的x值之差xl-x2>距離==>自右向左x2-xl>距離==>自左向右}}11、項目中添加sdk以外的其他類庫項目中創建一個文件夾,命名為libs將第三方jar文件拷貝到libs中選中該jar文件,右鍵:BuildPath==>AddtobuildPath然后該jar包中的class就可以在項目中被使用12、ViewPager內置有手勢左右方向滑動的View切換處理需要android-support-v4.jarlayout中聲明控件<android.support.v4.ViewPager.../>適配器:extendsPageAdapter*成員變量:Context,List<View>
*還要重寫兩個方法:instantiateItem(),destroyItem()準備數據源List<View>//添加layout:控件不需要監聽器;添加Activitydata.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);viewPager.setAdapter(adapter)ViewPager監聽器setOnPageChangeListener13、AppWidget1、創建步驟:1)layout/*.xml描述AppWidget外觀定義一個classextendsAppWidgetProviderres/xml/*.xml==>AppWidgetProviderInfo描述AppWidget的元數據manifest.xml注冊AppWidget<receiverandroid:name=〃MyAppWidget〃><intent-filter><actionandroid:name=〃android.appwidget.action.APPWIDGET_UPDATE〃/></intent-filter><meta-dataandroid:name=〃vider〃android:resource=〃@xml/providerinfo〃/></receiver>2、AppWidget中控件所顯示數據的更新,或者控件添加監聽器的實現RemoteViewsAppWidagetManagerAppWidgetManagerappMan=AppWidgetMana
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備入股買賣協議書
- 酒吧設備出售協議書
- 車輛推遲過戶協議書
- 酒吧包間轉讓協議書
- 茶樓經營合伙協議書
- 鄰居雙方建房協議書
- 體育俱樂部安全協議書
- 選美大賽參賽協議書
- 轉讓自建商鋪協議書
- 酒館股份保密協議書
- 第六單元《軍民團結一家親》課件 中學音樂人音版七年級下冊
- 2025年中考地理熱點素材題(含答案)
- 寧波大學2014-2015年高等數學A2期末考試試卷
- 2025年碩士研究生政治考研大綱
- 電子商務教師資格證教學理念試題及答案
- 地下工程防水技術規范
- 《醫院手術室凈化施工方案》培訓
- 【正版授權】 ISO/IEC 19790:2025 EN Information security,cybersecurity and privacy protection - Security requirements for cryptographic modules
- 整套課件-證券投資學(第二版)趙錫軍
- 2025年《教師專業成長與專業發展》培訓心得(3篇)
- 2025年重慶市環衛集團有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論