Android開發(fā)學(xué)習(xí)筆記_第1頁
Android開發(fā)學(xué)習(xí)筆記_第2頁
Android開發(fā)學(xué)習(xí)筆記_第3頁
Android開發(fā)學(xué)習(xí)筆記_第4頁
Android開發(fā)學(xué)習(xí)筆記_第5頁
已閱讀5頁,還剩274頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

踏實做好一天,就能做好一個星期,一個月,一年,一輩子PAGE279Android開發(fā)學(xué)習(xí)筆記Android學(xué)習(xí)筆記Eclipse中一個安卓項目的組成部分總框架應(yīng)用名:也就是應(yīng)用裝好后的名稱(與應(yīng)用管理的名稱可能不同)源代碼目錄包名,這個包名與一開始建項目時的唯一標(biāo)識包名要區(qū)分.Activity(活動類,類似main方法),一個應(yīng)用只有一個起作用.切換Activity類在AndroidMainfext.xml中android:name屬性自動生成,用于自動編譯檢查代碼是否正確資源文件與代碼之間的橋梁,生成資源文件的映射,讓外部調(diào)用版本類庫jar包,在項目下建一個libs目錄后,里的jar包會自動加載到此.資源路徑,不會在R文件注冊二進制文件,包括class、資源文件、dex、apk等資源目錄-一旦定義好就會在R.java類中自動生成映射DPI是“dotperinch”的縮寫,每英寸像素數(shù)。放高分辨率的圖片,如WVGA(480x800),FWVGA(480x854)放低分辨率的圖片,如QVGA(240x320)放中等分辨率的圖片,如HVGA(320x480)放超高分遍率的圖片,如dpi一般是320,里面是main.xml里面定義view元素及布局.里面是main.xml引用的String.xml,便于國際化清單文件,在軟件安裝的時候被讀取,定義軟件的關(guān)鍵配置用來混淆代碼的配置文件,防止別人反編譯供Eclipse使用,讀取該項目使用Android版本號。Activity類R類res資源包所有資源文件都在這個包下就會自動在R.java文件里注冊所以,只在有資源文件都放在這個包下,并建立對應(yīng)的文件夾,好區(qū)分自帶以下三個文件夾drawable:圖片資源包里面有四種屏幕類型.每種類型對應(yīng)不同的分辨率圖片不能大寫layout資源包values資源包@StringAndroidManifest.xml<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="sent.msn"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="10"/><uses-permissionandroid:name="android.permission.CALL_PHONE"/><uses-permissionandroid:name="android.permission.SEND_SMS"/><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"><activityandroid:name=".SentMSNActivity2"android:label="@string/app_name"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application></manifest>perties運行流程Android常用數(shù)據(jù)收集Android常用權(quán)限sd卡寫入權(quán)限:WRITE_EXTERNAL_STORAGE<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>安卓中文件的幾種保存模式安卓內(nèi)核是Linux,所以只要有文件,就有權(quán)限區(qū)分.看情況:如果在Activity中,Context可以省略.Context.MODE_PRIVATE:為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在該模式下,寫入的內(nèi)容會覆蓋原文件的內(nèi)容,如果想把新寫入的內(nèi)容追加到原文件中??梢允褂肅ontext.MODE_APPEND

Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件。

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應(yīng)用是否有權(quán)限讀寫該文件。

MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀??;

MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入。Android的計量單位px,in,mm,pt,dp,dip,sppx:是屏幕的像素點in:英寸mm:毫米pt:磅,1/72英寸dp:一個基于density的抽象單位,如果一個160dpi的屏幕,1dp=1pxdip:等同于dpsp:同dp相似,但還會根據(jù)用戶的字體大小偏好來縮放。建議使用sp作為文本的單位,其它用dipdip和px的關(guān)系:QVGA:density=0.75;densityDpi=120;QVGA(240*320)HVGA:density=1.0;densityDpi=160;HVGA(320*480)VGA:density=1.0;densityDpi=160;VGA(480*640)WVGA:density=1.5;densityDpi=240;WVGA(480*800)WQVGA:density=2.0;densityDpi=120;WQVGA(240*400)densityDip值表示每英寸有多少個顯示點,與分辨率是兩個概念不同densityDpi下屏幕分辨率信息,以480dip*800dip的WVGA(density=240)為例densityDpi=120時屏幕實際分辨率為240px*400px(兩個點對應(yīng)一個分辨率)狀態(tài)欄和標(biāo)題欄高各19px或者25dip橫屏是屏幕寬度400px或者800dip,工作區(qū)域高度211px或者480dip豎屏?xí)r屏幕寬度240px或者480dip,工作區(qū)域高度381px或者775dipdensityDpi=160時屏幕實際分辨率為320px*533px(3個點對應(yīng)兩個分辨率)狀態(tài)欄和標(biāo)題欄高個25px或者25dip橫屏是屏幕寬度533px或者800dip,工作區(qū)域高度295px或者480dip豎屏?xí)r屏幕寬度320px或者480dip,工作區(qū)域高度508px或者775dipdensityDpi=240時屏幕實際分辨率為480px*800px(一個點對于一個分辨率)狀態(tài)欄和標(biāo)題欄高個38px或者25dip橫屏是屏幕寬度800px或者800dip,工作區(qū)域高度442px或者480dip豎屏?xí)r屏幕寬度480px或者480dip,工作區(qū)域高度762px或者775dipapk的資源包中當(dāng)屏幕densityDpi=240時,使用hdpi標(biāo)簽的資源當(dāng)屏幕densityDpi=160時,使用mdpi標(biāo)簽的資源當(dāng)屏幕densityDpi=120時,使用ldpi標(biāo)簽的資源不加任何標(biāo)簽的資源是各種分辨率情況下共用的布局時盡量使用單位dip,少使用pxdp與px換算公式:pixs=dips*(densityDpi/160).dips=(pixs*160)/densityDpidp與px轉(zhuǎn)換的方法:publicstaticintdip2px(Contextcontext,floatdipValue){finalfloatscale=context.getResources().getDisplayMetrics().density;return(int)(dipValue*scale+0.5f);}publicstaticintpx2dip(Contextcontext,floatpxValue){finalfloatscale=context.getResource().getDisplayMetrics().density;return(int)(pxValue/scale+0.5f);}VGA:640*480QVGA:320*240HVGA:320*480WVGA:800*480WQVGA:480X272或400X240ViewView的定義及作用View是Android下的一個超類,在Android中,這個類幾乎包含了所有的屏幕類型。但它們之間有一些不同。每一個view都有一個用于繪畫的畫布。這個畫布可以用來進行任意擴展。Android應(yīng)用就是:UI+事件開發(fā)Android應(yīng)用就是布局UI,給UI中的各種各樣的控件根據(jù)需求添加事件.View是UI最基本的組成部分,負(fù)責(zé)繪制UI元素和界面動作的監(jiān)聽。.整個手機屏幕,也是一個View,就像一塊大畫布,上面可以放各種各樣的界面元素,如Button,EditText(文本域)或其它view.也就是說,View可以認(rèn)為是其他View,或Button,文本域等界面元素的容器。所屬包:java.lang.Object|android.view.View繼承結(jié)構(gòu):ViewextendsObjectimplementsDrawable.CallbackKeyEvent.CallbackAccessibilityEventSourceView怎么用?ViewGroup類是View類的子類,但是它可以充當(dāng)其他控件的容器。ViewGroup的子控件既可以是普通的View,也可以是ViewGroup。一些高級控件如Gallery、GridView等都是繼承自ViewGroup。Android中為每種不同的布局提供一個ViewGroup的子類,如LinearLayout、TableLayout、RelativeLayout、FrameLayout、AbsoluteLayout等。View類在布局中常用的屬性及對應(yīng)的方法屬性名稱對應(yīng)方法描述android:backgroundsetBackgroundResource(int)設(shè)置背景android:clickablesetClickable(boolean)設(shè)置View是否響應(yīng)單擊事件android:visibilitysetVisibility(int)控制View的可見性android:focusablesetFocusable(boolean)控制View是否可以獲取焦點android:idsetId(int)為View設(shè)置標(biāo)識符,可通過findViewById方法獲取android:longClickablesetLongClickable(boolean)設(shè)置View是否響應(yīng)長單擊事件android:soundEffectsEnabledsetSoundEffectsEnabled(boolean)設(shè)置當(dāng)View觸發(fā)單擊等事件時是否播放音效android:saveEnabledsetSaveEnabled(boolean)如果未作設(shè)置,當(dāng)View被凍結(jié)時將不會保存其狀態(tài)android:nextFocusDownsetNextFocusDownId(int)定義當(dāng)向下搜索時應(yīng)該獲取焦點的View,如果該View不存在或不可見,則會拋出RuntimeException異常android:nextFocusLeftsetNextFocusLeftId(int)定義當(dāng)向左搜索時應(yīng)該獲取焦點的Viewandroid:nextFocusRightsetNextFocusRightId(int)定義當(dāng)向右搜索時應(yīng)該獲取焦點的Viewandroid:nextFocusUpsetNextFocusUpId(int)定義當(dāng)向上搜索時應(yīng)該獲取焦點的View通用屬性:基本元素都有的id:元素的唯一標(biāo)志android:id="@+id/label"id屬性text:文本內(nèi)容android:text="@string/call_num"/>內(nèi)容ems="10"設(shè)置TextView或者Edittext的寬度為10個字符的寬度background:指定該控件所使用的背景色,RGB命名法layout_width:指定Container組件的寬度有三個可以用:android:layout_width="match_parent"參照父View,也就是屏幕android:layout_width="fill_parent"填充父view,也就是與屏幕一樣上面兩個功能一樣android:layout_width="wrap_content"包圍里面的內(nèi)容.layout_height:指定Container組件的高度gravity:對控件內(nèi)容操作方向的位置-layout_gravity:對控件本身相對于parentView位置二者共同參數(shù):可取的屬性及說明屬性值說明top不改變控件大小,對齊到容器頂部bottom不改變控件大小,對齊到容器底部left不改變控件大小,對齊到容器左側(cè)right不改變控件大小,對齊到容器右側(cè)center_vertical不改變控件大小,對齊到容器縱向中央位置center_horizontal不改變控件大小,對齊到容器橫向中央位置center不改變控件大小,對齊到容器中央位置fill_vertical若有可能,縱向拉伸以填滿容器fill_horizontal若有可能,橫向拉伸以填滿容器fill若有可能,縱向橫向同時拉伸填滿容器權(quán)重屬性:layout_weight注意:用這個的時候,把對應(yīng)的控件的layout_width或height設(shè)成0dp.當(dāng)前view占屏幕空間的權(quán)重.意思是需要顯示多大的視圖就占據(jù)多大的屏幕空間表示每個view在一行或一列中占有的權(quán)重,默認(rèn)是0,也就是有多大就占多少空間如果兩個文本編輯元素每一個的layout_weight值都設(shè)置為1,則兩者平分在父視圖布局剩余的寬度(因為我們聲明這兩者的重要度相等)。如果兩個文本編輯元素其中第一個的layout_weight值設(shè)置為1,而第二個的設(shè)置為2,則二者按1:2獲得空間.屬性值為true或false的屬性layout_centerHrizontal水平居中ayout_centerVertical垂直居中l(wèi)ayout_centerInparent相對于父元素完全居中l(wèi)ayout_alignParentBottom貼緊父元素的下邊緣layout_alignParentLeft貼緊父元素的左邊緣layout_alignParentRight貼緊父元素的右邊緣layout_alignParentTop貼緊父元素的上邊緣layout_alignWithParentIfMissing如果對應(yīng)的兄弟元素找不到就以父元素做參照物sigleLine:如果設(shè)置為真的話,則控件的內(nèi)容在同一行中進行顯示屬性值必須為id的引用名“@id/id-name”layout_below在某元素的下方layout_above在某元素的的上方layout_toLeftOf在某元素的左邊layout_toRightOf在某元素的右邊layout_alignTop本元素的上邊緣和某元素的的上邊緣對齊layout_alignLeft本元素的左邊緣和某元素的的左邊緣對齊layout_alignBottom本元素的下邊緣和某元素的的下邊緣對齊layout_alignRight本元素的右邊緣和某元素的的右邊緣對齊屬性值為具體的像素值如30dip(dp),40px(最好不用)10sp(文字用)width:指定控件的寬度height:指定控件的高度layout_marginBottom:離某元素底邊緣的距離layout_marginLeft:離某元素左邊緣的距離layout_marginRight:離某元素右邊緣的距離layout_marginTop:離某元素上邊緣的距離ndroid:textSize:指定控件當(dāng)中字體的大小padding:指定控件的內(nèi)邊距,也就是說控件當(dāng)中的內(nèi)容paddingLeft:本元素內(nèi)容離本元素右邊緣的距離paddingRight:本元素內(nèi)容離本元素右邊緣的距離paddingBottom:本元素內(nèi)容離本元素下邊緣的距離paddingTop:本元素內(nèi)容離本元素上邊緣的距離verticalSpacing:每個元素之間垂直間距android:verticalSpacing="10dp"horizontalSpacing每個元素之間水平間距android:horizontalSpacing="10dp"scaleType:控制圖片如何resized/moved來匹對ImageView的sizeandroid:scaleType是控制圖片如何resized/moved來匹對ImageView的size。ImageView.ScaleType/android:scaleType值的意義區(qū)別:CENTER/center:按圖片的原來size居中顯示,當(dāng)圖片長/寬超過View的長/寬,則截取圖片的居中部分顯示CENTER_CROP/centerCrop:按比例擴大圖片的size居中顯示,使得圖片長(寬)等于或大于View的長(寬)CENTER_INSIDE/centerInside將圖片的內(nèi)容完整居中顯示,通過按比例縮小或原來的size使得圖片長/寬等于或小于View的長/寬FIT_CENTER/fitCenter把圖片按比例擴大/縮小到View的寬度,居中顯示FIT_END/fitEnd把圖片按比例擴大/縮小到View的寬度,顯示在View的下部分位置FIT_START/fitStart把圖片按比例擴大/縮小到View的寬度,顯示在View的上部分位置FIT_XY/fitXY把圖片不按比例擴大/縮小到View的大小顯示MATRIX/matrix用矩陣來繪制,動態(tài)縮小放大圖片來顯示。**要注意一點,Drawable文件夾里面的圖片命名是不能大寫的。android:interpolator:控制動畫的進度interpolator定義一個動畫的變化率(therateofchange)。這使得基本的動畫效果(alpha,scale,translate,rotate)得以加速,減速,重復(fù)等。用通俗的一點的話理解就是:動畫的進度使用Interpolator控制。interpolator定義了動畫的變化速度,可以實現(xiàn)勻速、正加速、負(fù)加速、無規(guī)則變加速等。Interpolator是基類,封裝了所有Interpolator的共同方法,它只有一個方法,即getInterpolation(floatinput),該方法mapsapointonthetimelinetoamultipliertobeappliedtothetransformationsofananimation。Android提供了幾個Interpolator子類,實現(xiàn)了不同的速度曲線,如下:AccelerateDecelerateInterpolator在動畫開始與介紹的地方速率改變比較慢,在中間的時侯加速AccelerateInterpolator在動畫開始的地方速率改變比較慢,然后開始加速CycleInterpolator動畫循環(huán)播放特定的次數(shù),速率改變沿著正弦曲線DecelerateInterpolator在動畫開始的地方速率改變比較慢,然后開始減速LinearInterpolator在動畫的以均勻的速率改變對于LinearInterpolator,變化率是個常數(shù),即f(x)=x.publicfloatgetInterpolation(floatinput){returninput;}Interpolator其他的幾個子類,也都是按照特定的算法,實現(xiàn)了對變化率。還可以定義自己的Interpolator子類,實現(xiàn)拋物線、自由落體等物理效果。EditText的android:hint設(shè)置EditText為空時輸入框內(nèi)的提示信息。orientation線性布局的方向android:orientation="vertical">--方向:豎向horizontal表示橫向inputType:定義輸入的默認(rèn)方式:android:inputType="phone"--表示用于打電話:自動彈出數(shù)字鍵盤<requestFocus/>放在哪個標(biāo)簽里,就是哪個在一啟動時或取焦點view的布局RelativeLayout(相對布局)android-sdk-windows/docs/guide/topics/ui/layout-objects.html#relativelayout相對布局常用屬性RelativeLayout布局中,子控件的位置是相對于兄弟控件或父容器而決定的。出于性能考慮,在設(shè)計相對布局時要按照控件之間的依賴關(guān)系排列,如ViewA的位置相對于ViewB類決定,則需要保證在布局文件中ViewB在ViewA的前面。相對布局中只取true或false的屬性屬性名稱屬性說明android:layout_centerHorizontal當(dāng)前控件位于父控件的橫向中間位置android:layout_centerVertical當(dāng)前控件位于父控件的縱向中間位置android:layout_centerInParent當(dāng)前控件位于父控件的中央位置android:layout_alignParentBottom當(dāng)前控件低端與父控件低端對齊android:layout_alignParentLeft當(dāng)前控件左側(cè)與父控件左側(cè)對齊android:layout_alignParentRight當(dāng)前控件右側(cè)與父控件右側(cè)對齊android:layout_alignParentTop當(dāng)前控件頂端與父控件頂端對齊android:layout_alignWithParentIfMissing當(dāng)參照控件不存在或不可見時參照父控件相對布局中取值為其他控件id的屬性及說明:后面接要參照的id.格式如:屬性名稱屬性說明android:layout_toRightOf使當(dāng)前控件位于給出id控件的右側(cè)android:layout_toLeftOf使當(dāng)前控件位于給出id控件的左側(cè)android:layout_above使當(dāng)前控件位于給出id控件的上方android:layout_below使當(dāng)前控件位于給出id控件的下方android:layout_alignTop使當(dāng)前控件的上邊界與給出id控件的上邊界對齊android:layout_alignBottom使當(dāng)前控件的下邊界與給出id控件的下邊界對齊android:layout_alignLeft使當(dāng)前控件的左邊界與給出id控件的左邊界對齊android:layout_alignRight使當(dāng)前控件的右邊界與給出id控件的右邊界對齊相對布局中取值為像素的屬性及說明屬性名稱屬性說明android:layout_marginLeft當(dāng)前控件的左側(cè)的留白android:layout_marginRight當(dāng)前控件的右側(cè)的留白android:layout_marginTop當(dāng)前控件的上方的留白android:layout_marginBottom當(dāng)前控件的下方的留白TableLayout(表格布局)android-sdk-windows/docs/guide/topics/ui/layout-objects.html#tablelayout表格布局:是一個ViewGroup以表格顯示它的子視圖(view)元素,即行和列標(biāo)識一個視圖的位置。其實Android的表格布局跟HTML中的表格布局非常類似,就像HTML表格的<tr>標(biāo)記。用表格布局需要知道以下幾點:,表示有多少列.對應(yīng)的方法:,作用:設(shè)置表格的列是否收縮(列編號從0開始,下同),多列用逗號隔開(下同),如android:shrinkColumns="0,1,2",即表格的第1、2、3列的內(nèi)容是收縮的以適合屏幕,不會擠出屏幕。,對應(yīng)的方法:,作用:設(shè)置表格的列是否隱藏,對應(yīng)的方法:,作用:設(shè)置表格的列是否拉伸<?xmlversion="1.0"encoding="utf-8"?>

<TableLayoutxmlns:android="/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

全局列屬性:android:shrinkColumns="0,1,2">有三列,從0開始<TableRow><!--row1-->--表示第一行,里面是第一行包含的元素

<Buttonandroid:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello,IamaButton1"

局部列屬性:android:layout_column="0"--表示在第一列

/>

<Buttonandroid:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello,IamaButton2"

android:layout_column="1"表示在第二列注意:如果本行或上面的行中的列沒有l(wèi)ayout_column="0"屬性.那么這里的1,不會起作用.

/>

</TableRow>TableLayout常用的屬性:全局列屬性:android:shrinkColumns="0,1,2">有三列,從0開始android:layout_column="1"表示在第二列注意:如果本行或上面的行中的列沒有l(wèi)ayout_column="0"屬性.那么這里的1,不會起作用.TableLayout類常用屬性及對應(yīng)的方法屬性名稱對應(yīng)方法描述android:collapseColumnssetColumnCollapsed(int,boolean)設(shè)置指定列號的列為Collapsed,列號從0開始計算android:shrinkColumnssetShrinkAllColumns(boolean)設(shè)置指定列號的列為Shrinkable,列號從0開始計算android:stretchColumnssetStretchAllColumns(boolean)設(shè)置指定列號的列為Stretchable,列號從0開始計算

FrameLayout(幀布局)android-sdk-windows/docs/guide/topics/ui/layout-objects.html#framelayoutsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);線性布局(LinearLayout)是一個ViewGroup以線性方向顯示它的子視圖(view)元素,即垂直地或水平地。<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical">表示線性堅直排列android:orientation="horizontal">表示線性水平排列LinearLayout常用的屬性LinearLayout常用的屬性及對應(yīng)設(shè)置方法屬性名稱對應(yīng)方法描述android:orientationsetOrientation(int)設(shè)置線性布局的朝向,可取horizontal和vertical兩種排列方式android:gravitysetGravity(int)設(shè)置線性布局的內(nèi)部元素的布局方式絕對布局(AbsoluteLayout)。絕對布局:是一個ViewGroup以絕對方式顯示它的子視圖(view)元素,即以坐標(biāo)的方式來定位在屏幕上位置。這種布局方式很好理解,在布局文件或編程地設(shè)置View的坐標(biāo),從而絕對地定位。如下所示布局文件:<AbsoluteLayoutxmlns:android="/apk/res/android"android:id="@+id/AbsoluteLayout01"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:id="@+id/txtIntro"android:text="絕對布局"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_x="20dip"<!--haveaneyeon!-->android:layout_y="20dip"><!--haveaneyeon!--></TextView></AbsoluteLayout>標(biāo)簽布局(TabLayout)網(wǎng)格視圖(GridView)列表視圖(ListView)列表布局:是一個ViewGroup以列表顯示它的子視圖(view)元素,列表是可滾動的列表。列表元素通過自動插入到列表。:擴展自,它是和數(shù)據(jù)列表之間的橋梁。ListView可以顯示任何包裝在ListAdapter中的數(shù)據(jù)。該類提供兩個公有類型的抽象方法:publicabstractbooleanareAllItemsEnabled():表示ListAdapter中的所有元素是否可激活的?如果返回真,即所有的元素是可選擇的即可點擊的。publicabstractbooleanisEnabled(intposition):判斷指定位置的元素是否可激活的?下面通過一個例子來,創(chuàng)建一個可滾動的列表,并從一個字符串?dāng)?shù)組讀取列表元素。當(dāng)一個元素被選擇時,顯示該元素在列表中的位置的消息。1)、首先,將res/layour/main.xml的內(nèi)容置為如下:

<?xmlversion="1.0"encoding="utf-8"?>

<TextViewxmlns:android="/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:padding="10dp"

android:textSize="16sp">

</TextView>這樣就定義了元素在列表中的布局。2)、src/blogs.www/HelloWorld.java文件的代碼如下:packageblogs.www;importandroid.app.ListActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.AdapterView;importandroid.widget.ArrayAdapter;importandroid.widget.ListView;importandroid.widget.TextView;importandroid.widget.Toast;importandroid.widget.AdapterView.OnItemClickListener;publicclassHelloWorldextendsListActivity{//注意這里Helloworld類不是擴展自Acitvity,而是擴展自ListAcitivty/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setListAdapter(newArrayAdapter<String>(this,R.layout.main,COUNTRIES));ListViewlv=getListView();lv.setTextFilterEnabled(true);lv.setOnItemClickListener(newOnItemClickListener(){publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){//Whenclicked,showatoastwiththeTextViewtextToast.makeText(getApplicationContext(),((TextView)view).getText(),Toast.LENGTH_SHORT).show();}});}staticfinalString[]COUNTRIES=newString[]{"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24"};}Note:onCreate()函數(shù)中并不像往常一樣通過setContentView()為活動(Activity)加載布局文件,替代的是通過自動添加一個ListView填充整個屏幕的ListActivity。在此文件中這個方法以一個ArrayAdapter為參數(shù):setListAdapter(newArrayAdapter<String>(this,R.layout.main,COUNTRIES)),這個ArrayAdapter管理填入ListView中的列表元素。ArrayAdapter的構(gòu)造函數(shù)的參數(shù)為:this(表示應(yīng)用程序的上下文context)、表示ListViewde布局文件(這里是R.layout.main)、插入ListView的List對象對數(shù)組(這里是COUNTRES)。定義了每個元素的點擊(on-click)的監(jiān)聽器,當(dāng)ListView中的元素被點擊時,方法被調(diào)用,在這里是即一個消息——每個元素的位置將顯示。3)、運行應(yīng)用程序得如下結(jié)果(點擊1之后,在下面顯示了1):圖7、列表布局NOTE:如果你改了HelloWorldextendsListActivity而不是Activity之后,運行程序是提示:“ConversiontoDalvikformatfailedwitherror1”??梢赃@么解決:解決辦法是Project>Clean...>Cleanprojectselectedbelow>Ok5.1、一個小的改進上面我們是把要填充到ListView中的元素硬編碼到HelloWorld.java文件中,這樣就缺乏靈活性!也不符合推薦的應(yīng)用程序的界面與控制它行為的代碼更好地分離的準(zhǔn)則!其實我們可以把要填充到ListView的元素寫到res/values/strings.xml文件中的<string-array>元素中,然后再源碼中動態(tài)地讀取。這樣strings.xml的內(nèi)容類似下面:<?xmlversion="1.0"encoding="utf-8"?><resources><string-arrayname="countries_array"><item>1</item><item>2</item><item>3</item><item>4</item><item>5</item><item>6</item><item>7</item></string-array></resources>然而HelloWorld.java文件中的onCreate()函數(shù),則這樣動態(tài)訪問這個數(shù)組及填充到ListVies:

String[]countries=getResources().getStringArray(R.array.countries_array);

setListAdapter(newArrayAdapter<String>(this,R.layout.list_item,countries));5.2、補充說明首先總結(jié)一下列表布局的關(guān)鍵部分:布局文件中定義ListViewAdapter用來將數(shù)據(jù)填充到ListView要填充到ListView的數(shù)據(jù),這些數(shù)據(jù)可以字符串、圖片、控件等等其中Adapter是ListView和數(shù)據(jù)源之間的橋梁,根據(jù)數(shù)據(jù)源的不同Adapter可以分為三類:String[]:ArrayAdapterList<Map<String,?>>:SimpleAdapter數(shù)據(jù)庫Cursor:SimpleCursorAdapter使用ArrayAdapter(數(shù)組適配器)顧名思義,需要把數(shù)據(jù)放入一個數(shù)組以便顯示,上面的例子就是這樣的;SimpleAdapter能定義各種各樣的布局出來,可以放上ImageView(圖片),還可以放上Button(按鈕),CheckBox(復(fù)選框)等等;SimpleCursorAdapter是和數(shù)據(jù)庫有關(guān)的東西。篇幅有限后面兩種就不舉例實踐了。你可以參考o(jì)r。view的事件監(jiān)聽一個監(jiān)聽器有兩部分組成:一個是監(jiān)聽的事件源,傳過來誰就是誰,一個是具體的監(jiān)聽事件,也就是說,事件促發(fā)時,要執(zhí)行的動作.事件的監(jiān)聽機制在安卓中的應(yīng)用:一個監(jiān)聽器可以監(jiān)聽多個事件源(view對象),只要給其添加同一個事件監(jiān)聽器就可以,通過匿名內(nèi)部類實現(xiàn)publicclassSentMSNActivityextendsActivity{ privateEditTextet;/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//獲得EditText對象以便獲得其內(nèi)容et=(EditText)findViewById(R.id.callET);//獲得button對象Buttonbt=(Button)findViewById(R.id.callBT);//給Button對象添加監(jiān)聽bt.setOnClickListener(newOnClickListener(){ //定義監(jiān)聽到事件促發(fā)要運行的方法-撥打電話 publicvoidonClick(Viewv){ //在方法中獲得電話號碼 Stringnum=et.getText().toString(); //調(diào)用android的對象的api,撥打電話. Intentintent=newIntent();//創(chuàng)建一個意圖對象 intent.setAction(Intent.ACTION_CALL);//給意圖對象添加一個撥打電話的動作 intent.setData(Uri.parse("tel:"+num));//給意圖對象添加執(zhí)行動作的數(shù)據(jù) startActivity(intent);//用意圖對象當(dāng)參數(shù)啟動撥打電話的Activity,實際是sentMSN調(diào)用的內(nèi)部一個方法去執(zhí)行 } });}通過內(nèi)部類實現(xiàn)classMyOnClickListenerimplementsOnClickListener{ //定義監(jiān)聽到事件促發(fā)要運行的方法-撥打電話 publicvoidonClick(Viewv){ //在方法中獲得電話號碼 Stringnum=et.getText().toString(); //調(diào)用android的對象的api,撥打電話. Intentintent=newIntent();//創(chuàng)建一個意圖對象 intent.setAction(Intent.ACTION_CALL);//給意圖對象添加一個撥打電話的動作 intent.setData(Uri.parse("tel:"+num));//給意圖對象添加執(zhí)行動作的數(shù)據(jù) startActivity(intent);//用意圖對象當(dāng)參數(shù)啟動撥打電話的Activity,實際是sentMSN調(diào)用的內(nèi)部一個方法去執(zhí)行 } }直接在xml給View(視圖)元素添加事件,并在類中定義事件促發(fā)的動作.publicclassSentMSNActivityextendsActivity{ privateEditTextet; privateEditTextetMSN; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //獲得EditText對象以便獲得其內(nèi)容 et=(EditText)findViewById(R.id.callET); etMSN=(EditText)findViewById(R.id.callETMSN); } publicvoidonClick(Viewv){ //定義監(jiān)聽到事件促發(fā)要運行的方法-撥打電話 publicvoidonClick(Viewv){ //在方法中獲得電話號碼 Stringnum=et.getText().toString(); //調(diào)用android的對象的api,撥打電話. Intentintent=newIntent();//創(chuàng)建一個意圖對象 intent.setAction(Intent.ACTION_CALL);//給意圖對象添加一個撥打電話的動作 intent.setData(Uri.parse("tel:"+num));//給意圖對象添加執(zhí)行動作的數(shù)據(jù) startActivity(intent);//用意圖對象當(dāng)參數(shù)啟動撥打電話的Activity,實際是sentMSN調(diào)用的內(nèi)部一個方法去執(zhí)行 }}方法與類:Activity主界面類類繼承結(jié)構(gòu).Activity類最簡單HelloDemopublicclassSentMSNActivity{ publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); }Activity下的findViewById方法獲取控件對象但要強轉(zhuǎn):如下:EditTextet=(EditText)findViewById(R.id.callET);EditText的getText():獲得數(shù)據(jù)Stringnum=et.getText().toString();Intent類意圖類意圖類撥打電話//調(diào)用android的對象的api,撥打電話.//創(chuàng)建一個意圖對象Intentintent=newIntent();setAction:給意圖對象添加一個撥打電話的動作intent.setAction(Intent.ACTION_CALL);setData:給意圖對象添加執(zhí)行動作的數(shù)據(jù)intent.setData(Uri.parse("tel:"+num));/用意圖對象當(dāng)參數(shù)啟動撥打電話的Activity,實際是sentMSN調(diào)用的內(nèi)部一個方法去執(zhí)行startActivity(intent);SmsManager類-發(fā)短信單例,用靜方法獲取對象SmsManagermanager=SmsManager.getDefault();用sendTextMessage發(fā)送短信第一個參數(shù):電話號碼第二個參數(shù):信息中心號碼,可以為null第三個參數(shù),短信內(nèi)容.第四個參數(shù):接收回報:可以用null第五個參數(shù):發(fā)送回報,可以用nullmanager.sendTextMessage(num,null,msn,null,null);divideMessage方法:防止短信超長ArrayList<String>smss=manager.divideMessage(content);//遍歷發(fā)送 for(Stringsms:smss){ sm.sendTextMessage(number,null,sms,null,null); }SmsMessagesms=SmsMessage.createFromPdu((byte[])pdu); //把字節(jié)數(shù)據(jù)封裝為SmsMessage對象 Datedate=newDate(sms.getTimestampMillis()); Stringaddress=sms.getOriginatingAddress(); Stringbody=sms.getMessageBody();Toast類:回饋信息.靜態(tài)方法makeText,獲得對象第一個參數(shù):當(dāng)前上下文對象getApplicationContext()或this第二個參數(shù):提示信息第三個參數(shù):提示顯示的時間Toast.LENGTH_SHORT或直接寫多少秒show()方法顯示提示Toast.makeText(getApplicationContext(),"發(fā)送成功",Toast.LENGTH_SHORT).show();發(fā)短信標(biāo)準(zhǔn)寫法:publicvoidsend(Viewview){ Stringnumber=et_number.getText().toString().trim(); Stringcontent=et_content.getText().toString().trim(); if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){ Toast.makeText(this,"電話號碼或者內(nèi)容不能為空",0).show(); return; }else{ //發(fā)送短信 SmsManagersm=SmsManager.getDefault(); ArrayList<String>smss=sm.divideMessage(content); for(Stringsms:smss){ sm.sendTextMessage(number,null,sms,null,null); } Toast.makeText(this,"短信發(fā)送完畢",0).show(); } }建立簽名與導(dǎo)出應(yīng)用導(dǎo)出apk應(yīng)用簽名應(yīng)用現(xiàn)有簽名:建立新的簽名:Android的試調(diào)與測試debug試調(diào)基本與web試調(diào)一致,定義斷點,然后運行,只不過以前在網(wǎng)頁配合,現(xiàn)在要在手機上配合Junit測試Android手動配置在應(yīng)用下定義一個繼承AndroidTestCase類的測試類,且里面的所有測試方法以test小寫開頭publicclassTestextendsAndroidTestCase{ publicvoidtestCha(){ ContactServiceservice=newContactService(getContext()); List<ContactPhone>list=service.getContact(); System.out.println(list); }在AndroidManifest.xml加上以下配置<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="read.phone"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="10"/><uses-permissionandroid:name="android.permission.READ_CONTACTS"/><instrumentationandroid:name="android.test.InstrumentationTestRunner"android:targetPackage="read.phone"/><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"><uses-libraryandroid:name="android.test.runner"/><activity</application>自動配置在建應(yīng)用時選擇需要測試方法,那么就會自動生成一個關(guān)聯(lián)的測試應(yīng)用.Android-Junit的測試原理就是會生成一個測試的apk,發(fā)送到手機上去,然后創(chuàng)建要執(zhí)行對象,運行要執(zhí)行的方法,不般,不要activity界面logcat日志的管理system.err.println();異常打印用的是這個方法 提示信息級別 catch異常:就是黃警告沒catch就是紅 log類V()d()i()w()e()可以指定輸出日志 logcat界面的管理文件操作寫入文件到SD卡需要在清單文件中注冊權(quán)限 <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>2.1版本以下的SDCard位置和2.2之后版本不同可以通過Environment.getExternalStorageDirectory()獲取當(dāng)前SDCard位置,兼容所有版本獲取SDCard狀態(tài)--判斷SD卡是否存在通過Environment.getExternalStorageState()方法獲取SDCard當(dāng)前狀態(tài)常量Environment.MEDIA_MOUNTED為已安裝代碼如下://獲取sd卡路徑publicvoidsave2sd(Stringname,Stringcontent)throwsIOException{Filefile=Environment.getExternalStorageDirectory();//組合文件路徑FilefileName=newFile(file,name);//定義流FileOutputStreamfos=newFileOutputStream(fileName);//寫入到sd卡fos.write(content.getBytes());fos.close();寫入文件到rom獲取輸出流,寫入--權(quán)限管理通過Context.openFileOutput(Stringname,intmode)可以獲取一個文件輸出流name為文件名,mode為文件模式,有4種模式輸出流指向路徑為:/data/data/包名/files/文件模式在Context中有定義常量,可以相加0私有1可讀2可寫3可讀可寫MODE_PRIVATE 私有MODE_WORLD_READABLE 其他程序可讀(不可寫)MODE_WORLD_WRITEABLE 其他程序可寫(不可讀)模式可以組合使用,例如:MODE_WORLD_READABLE+MODE_WORLD_WRITEABLEMODE_APPEND 追加代碼如下:FileOutputStreamfos=context.openFileOutput(name,Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE); fos.write(content.getBytes()); fos.close();讀取ROM中的文件獲取輸入流獲取路徑輸出通過Context.openFileInput(Stringname)可以獲取一個文件輸入流該輸入流可以讀取/data/data/包名/files/路徑下的文件獲取當(dāng)前程序Files文件路徑ContextWrapper.getFilesDir()用XmlPullParser解析讀取xml獲取XmlPullParser對象關(guān)聯(lián)資源文件得到輸入流解析器關(guān)聯(lián)輸入流并定義編碼--獲得Eventype事件方式--通過pullnext得到事件代碼與事件方式代碼來標(biāo)識解析Xml.newPullParser()獲得解析器xmlPull.getEventType()獲取事件方式parser.setInput(in,"UTF-8")設(shè)置輸入流以及編碼parser.next()獲取下一個解析事件,得到一個事件代碼XmlPullParser中定義了常量來標(biāo)識各種解析事件--與事件方式比對START_DOCUMENT、END_DOCUMENT、START_TAG、END_TAG、TEXT代碼事例如下:將xml讀入集合publicList<Person>pullXml()throwsIOException,Exception{ //建立集合 List<Person>list=newArrayList<Person>(); //獲取資源文件 InputStreamin=PullXml.class.getClassLoader().getResourceAsStream( "persons.xml"); //建立資源文件輸入流 //獲取pull對象 XmlPullParserxmlPull=Xml.newPullParser(); //關(guān)聯(lián)輸入流 xmlPull.setInput(in,"utf-8"); Personp=null; //獲取事件方式,是一個int這個游標(biāo)不從上往下不斷行next,pull在解析到一個類型的標(biāo)簽時, //得到的事件方式值是不一樣的,這樣就可以根據(jù)不同的事件方式值,去判斷進行什么樣的處理. //通過type.next得到int值只要不是一個end_Document,則一直next下去 for(inttype=xmlPull.getEventType();type!=XmlPullParser.END_DOCUMENT;type=xmlPull .next()){ //只要讀到開始標(biāo)簽,不管大還是小.就判斷開始獲取里面需要屬性和內(nèi)容. if(type==XmlPullParser.START_TAG){ //如果標(biāo)簽名是person,則建立一個Person對象,并且設(shè)制一個id if("person".equals(xmlPull.getName())){ p=newPerson(); p.setId(xmlPull.getAttributeValue(0));//表示取這個標(biāo)簽的第幾個屬性 //如果是name就給標(biāo)簽設(shè)制一個name屬性 }elseif("name".equals(xmlPull.getName())){ p.setName(xmlPull.nextText()); //如果是age就給標(biāo)簽設(shè)制一個age屬性 }elseif("age".equals(xmlPull.getName())){ p.setAge(Integer.parseInt(xmlPull.nextText())); } } //如果讀到結(jié)束標(biāo)簽,且是person那么加入到集合中 if(type==XmlPullParser.END_TAG){ if("person".equals(xmlPull.getName())){ list.add(p); p=null; } } } returnlist; }XmlSerializer寫文件到xml得到應(yīng)用file文件路徑再定義輸出流關(guān)聯(lián)文件得到序列化xml工具--關(guān)聯(lián)輸出流與寫義解碼寫入用序列化工具類以下方法寫放:startDocumentstartTagattributetextendTagendDocumentStringpath="/data/data/xml.demo/wr.xml"; OutputStreamout=newFileOutputStream(path); //獲取xml序列化工具 XmlSerializerxmlSer=Xml.newSerializer(); xmlSer.setOutput(out,"UTF-8"); //用工具寫入:兩個參數(shù)后面的true表示不引用外部xml xmlSer.startDocument("UTF-8",true);//寫放標(biāo)標(biāo)簽,有屬性就寫屬性,有文本就寫文本 xmlSer.startTag(null,"persons"); for(Personp:pullXml()){ xmlSer.startTag(null,"person"); xmlSer.attribute(null,"id",p.getId()); xmlSer.startTag(null,"name"); xmlSer.text(p.getName()); xmlSer.endTag(null,"name"); xmlSer.startTag(null,"age"); xmlSer.text(p.getAge()+""); xmlSer.endTag(null,"age"); xmlSer.endTag(null,"person"); } xmlSer.endTag(null,"persons"); xmlSer.endDocument(); }}偏好設(shè)制:SharedPreferences--類似于數(shù)據(jù)回顯獲取對象用setString("屬性名",屬性值)保存數(shù)據(jù)獲得Editor對象--用edit.putString("key值",沒保存數(shù)據(jù)時的默認(rèn)值).不一定是String可以是基本類型,如getIntsetInt之類獲取對象Context.getSharedPreferences(Stringname,intmode)在/data/data/<package>/shared_pref/目錄下創(chuàng)建一個以name命名的xml文件,mode文件為模式保存數(shù)據(jù)--獲得editor對象寫入保存數(shù)據(jù)調(diào)用edit()方法可以獲取一個Editor對象,對數(shù)據(jù)進行存儲,存儲之后需要調(diào)用commit()保存到文件讀取偏好數(shù)據(jù),放入需要的標(biāo)簽獲得SharedPreferences之后調(diào)用getString()、getInt()等方法獲取其中設(shè)置的值獲取SharedPreferences對象的另一種方式,在Activity中獲取SharedPreferences不指定文件名在Activity中可以調(diào)用getPreferences(intmode)方法獲得一個SharedPreferences,文件名和Activity名一致代碼事例:publicclassSharedActivityextendsActivity{ privateEditTexteT2; privateEditTexteT1; privateSharedPreferencessp; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); eT1=(EditText)findViewById(R.id.editText1); eT2=(EditText)findViewById(R.id.editText2); sp=getSharedPreferences("config",MODE_PRIVATE); //讀出數(shù)據(jù)到EditText中 eT1.setText(sp.getString("phone","10086")); eT2.setText(sp.getString("content","haha")); } publicvoidsave(Viewview){ Stringphone=eT1.getText().toString(); Stringcontent=eT2.getText().toString(); //把數(shù)據(jù)保存入SharedPreferences //用對象得到編輯器 Editoreditor=sp.edit(); editor.putString("phone",p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論