2023年Android開發(fā)一些重要知識點(diǎn)_第1頁
2023年Android開發(fā)一些重要知識點(diǎn)_第2頁
2023年Android開發(fā)一些重要知識點(diǎn)_第3頁
2023年Android開發(fā)一些重要知識點(diǎn)_第4頁
2023年Android開發(fā)一些重要知識點(diǎn)_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Android開發(fā)網(wǎng)上的一些重要知識點(diǎn)

1.android單實(shí)例運(yùn)營方法

我們都知道Android平臺沒有任務(wù)管理器,而內(nèi)部App維護(hù)者一個(gè)ActMtyhistory

stack來實(shí)現(xiàn)窗口顯示和銷毀,對于常規(guī)從快捷方式運(yùn)營來看都是startActivity也許會(huì)使

用FLAG_ACTIVITY_NEW_TASK標(biāo)記來打開一個(gè)新窗口,比如Launcher,所以考慮

單任務(wù)的實(shí)現(xiàn)方法比較簡樸,一方面Android123糾正下大家一種錯(cuò)誤的方法就是直接在

androidmanifest.xml的application節(jié)點(diǎn)中加入android:launchMode="si

ngIeInstance"這句,其實(shí)這樣將不會(huì)起到任何作用,Apps內(nèi)部維護(hù)的歷史棧作用于

Activity,我們必須在activity節(jié)點(diǎn)中加入android:launchMode="singlelnstanee"

這句才干保證單實(shí)例,當(dāng)然一般均加在主程序啟動(dòng)窗口的Activity。

2.px像素如何轉(zhuǎn)為dip設(shè)備獨(dú)立像素

最近有網(wǎng)友間如何將px像素轉(zhuǎn)為dip獨(dú)立設(shè)備像素,由于Android的設(shè)備分辨率眾多,

目前主流的為wvga,而很多老的設(shè)備為hvga甚至低端的qvga,對于兼容性來說使用d

ip無非是比較方便的,由于他和分辨率無關(guān)和屏幕的密度大小有關(guān),所以推薦使用。px

=(int)(dip*density+0.5f)〃這里android開發(fā)網(wǎng)提醒大家很多網(wǎng)友獲取densi

ty(密度)的方法存在問題,從資源中獲取的是靜態(tài)定義的,一般為1.0對于HVGA是正

好的,而對于wvga這樣的應(yīng)當(dāng)從WindowsManager中獲取,WVGA為1.5這里

可以再補(bǔ)充一下dip,sip的知識

3.Android中動(dòng)態(tài)改變ImageView大小

很多網(wǎng)友也許發(fā)現(xiàn)在1ayout.xm1文獻(xiàn)中定義了ImageView的絕對大小后,無法動(dòng)態(tài)修

改以后的大小顯示,其實(shí)Android平臺在設(shè)計(jì)UI控件時(shí)考慮到這個(gè)問題,為了適應(yīng)不同的

Drawab1e可以通過在xm1的相關(guān)ImageView中加入android:scaIe

Type="fitXY"這行即可,但由于使用了縮放也許會(huì)導(dǎo)致當(dāng)前UI有所變形。使用的前提是

限制ImageView所在的層,可以使用-一個(gè)內(nèi)嵌的方法限制顯示。

4.如何判斷Android手機(jī)當(dāng)前是否聯(lián)網(wǎng)?

假如擬開發(fā)一個(gè)網(wǎng)絡(luò)應(yīng)用的程序,一方面考慮是否接入網(wǎng)絡(luò),在Android手機(jī)中判斷是否聯(lián)網(wǎng)

可以通過ConnectivityManager類的isAvai1able()方法判斷,一方面獲取網(wǎng)絡(luò)通

訊類的實(shí)例ConnectivityManagercwjManager=(ConnectivityM

anager)getSystemService(Context.CONNECTIVITY_SERVICE);,使用cwjM

anager.getActiveNetworklnfo().isAvailab1e();來返回是否有效,假如

為True則表達(dá)當(dāng)前Android手機(jī)已經(jīng)聯(lián)網(wǎng),也許是WiFi或GPRS、HSDPA等等,具體

的可以通過ConnectivityManager類的getActiveNetworklnfo()方法判斷

具體的接入方式,需要注意的是有關(guān)調(diào)用需要加入<uses-permissionandroid:name

="android.permission.ACCESS_NETW0RK_STATE"x/uses-permission>

這個(gè)權(quán)限,android開發(fā)網(wǎng)提醒大家在真機(jī)上Market和Browser程序都使用了這個(gè)

方法,來判斷是否繼續(xù),同時(shí)在一些網(wǎng)絡(luò)超時(shí)的時(shí)候也可以檢查下網(wǎng)絡(luò)連接是否存在,以免

浪費(fèi)手機(jī)上的電力資源。

5.Drawable、Bitmap、Canvas和Paint的關(guān)系

很多網(wǎng)友剛剛開始學(xué)習(xí)Android平臺,對于DrawabIe、Bitmap、Canvas和Paint

它們之間的概念不是很清楚,其實(shí)它們除了Drawable外早在Sun的J2ME中就已經(jīng)出

現(xiàn)了,但是在Android平臺中,Bitmap^Canvas相關(guān)的都有所變化。一方面讓我們理

解下Android平臺中的顯示類是View,但是還提供了底層圖形類android.graphics,今

天所說的這些均為graphics底層圖形接口。Bitmap-稱作位圖,一般位圖的文獻(xiàn)格

式后綴為bmp,當(dāng)然編碼器也有很多如RGB565、RGB888。作為一種逐像素的顯示對象

執(zhí)行效率高,但是缺陷也很明顯存儲效率低。我們理解為一種存儲對象比較好。Drawabl

e-作為Android平下通用的圖形對象,它可以裝載常用格式的圖像,比如GIF、PN

G、JPG,當(dāng)然也支持BMP,當(dāng)然還提供一些高級的可視化對象,比如漸變、圖形

等。Canvas-名為畫布,我們可以看作是一種解決過程,使用各種方法來管理

Bitmap.GL或者Path途徑,同時(shí)它可以配合Matrix矩陣類給圖像做旋轉(zhuǎn)、縮放等操

作,同時(shí)Canvas類還提供了裁剪、選取等操作。Paint-我們可以把它看做一個(gè)畫圖

工具,比如畫筆、畫刷。他管理了每個(gè)畫圖工具的字體、顏色、樣式。假如涉及一些

Android游戲開發(fā)、顯示特效可以通過這些底層圖形類來高效實(shí)現(xiàn)自己的應(yīng)用。

6.Activity切換導(dǎo)致的onCreate反復(fù)執(zhí)行

部分網(wǎng)友會(huì)發(fā)現(xiàn)Activity在切換到后臺或布局從橫屏LANDSCAPE切換到PORTRAI

T,會(huì)重新切換Activity會(huì)觸發(fā)一次onCreate方法,我們可以在androidmanifest.xml

中的activit元素加入這個(gè)屬性android:configChanges="orientation|keybo

ardHidden"即可,比如vactivityandroid:name=\android123"andr

oid:configChanges=norientation|keyboardHidden"android:label="@

string/app_name”,同時(shí)在Activity的Java文獻(xiàn)中重載onConfigurationChan

ged(ConfigurationnewConfig)這個(gè)方法,這樣就不會(huì)在布局切換或窗口切換時(shí)重載

onCreate等方法。代碼如下:

[java]viewplaincopyprint?

1.@Override

2.publicvoidonConfigurationChanged(ConfigurationnewConf

ig)

3.(

4.super.onConfigurationChanged(newConfig);

5.if(this,getResources().getConfiguration().orienta

tion==Configuration.ORIENTATION_LANDSCAPE)

6.(

7.//land

8.)

9.elseif(this.getResources().getConfiguration().orientatio

n==Configuration.ORIENTATION_PORTRAIT)

10.{

11.//port

12.}

13.}

7.Android的ImageButton問題

很多網(wǎng)友對Android提供的ImageButton有個(gè)疑問,當(dāng)顯示Drawab1e圖片時(shí)就不會(huì)再

顯示文字了,其實(shí)解決的方法有兩種,第一種就是圖片中就寫入文字,但是這樣解決會(huì)增長

程序體積,同時(shí)硬編碼方式會(huì)影響多國語言的發(fā)布。第二種解決方法很簡樸,通過度析可以

看至UImageButton的layout,我們可以直接直接繼承,添加一個(gè)Textview,對齊方

式為右側(cè)即可實(shí)現(xiàn)ImageButton支持文字右側(cè)顯示。

8.Android代碼優(yōu)化技術(shù)

1.Java內(nèi)存控制對于字符串操作而言假如需要連加這樣的操作建議使用StringBu

iIder,通過調(diào)試不難發(fā)現(xiàn)假如你的字符串每次連加,使用String需要的內(nèi)存開銷會(huì)遠(yuǎn)大于

StringBuilder,然后Android手機(jī)常規(guī)的運(yùn)營內(nèi)存大約在128MB左右,對于運(yùn)營多任

務(wù)就需要考慮了,Android開發(fā)網(wǎng)提醒由于Java有GC不需要手動(dòng)釋放那么分派的時(shí)候

就要格外的小心,頻繁的GC操作仍然是很影響性能的,在調(diào)試時(shí)我們可以通過logcat查看

內(nèi)存釋放情況。2.循環(huán)使用平時(shí)在訪問一個(gè)屬性的時(shí)候效率遠(yuǎn)比一個(gè)固定變量低,假

如你的循環(huán)估計(jì)次數(shù)經(jīng)常大于5,假設(shè)xxx.GetLength()方法的值一般大于5,推薦這樣

寫,比如for(inti=0;i<xxx.GetLength();i++)這里xxx.GetLength在每

次循環(huán)都要調(diào)用,必然會(huì)影響程序效率,在游戲開發(fā)中顯得更為明顯,改善的方法應(yīng)當(dāng)為int

j=xxx.GetLength()for(inti=0;i<j;i++)3.圖片的優(yōu)化在Android平

臺中2維圖像解決庫BitmapFactory做的比較智能,為了減少文獻(xiàn)體積和效率,經(jīng)常不

用很多資源文獻(xiàn),而把很多小圖片放在一個(gè)圖片中,有切片的方式來完畢,在J2ME中我們

這樣是為了將少文獻(xiàn)頭而解決MIDP這些設(shè)備的問題,而Android中雖然機(jī)型硬件配置都

比較高,有關(guān)AndroidG1硬件配置可以參考G1手機(jī)參數(shù)以及評測,但是當(dāng)資源多時(shí)這

樣的運(yùn)營效率還是令人滿意的,至少Da1vik優(yōu)化的還不是很夠。

9.Android開發(fā)進(jìn)階之NIO非阻塞包(一)

對于Android的網(wǎng)絡(luò)通訊性能的提高,我們可以使用Java上高性能的NIO(New

I/O)技術(shù)進(jìn)行解決,NIO是從JDK1.4開始引入的,NI。的N我們可以理解為Noblocki

ng即非阻塞的意思,相相應(yīng)傳統(tǒng)的I/O,比如Socket的accpet()、read。這些方

法而言都是阻塞的。NIO重要使用了Channel和Selector來實(shí)現(xiàn),Java的Sele

ctor類似Winsock的Select模式,是一種基于事件驅(qū)動(dòng)的,整個(gè)解決方法使用了輪訓(xùn)

的狀態(tài)機(jī),假如你過去開發(fā)過Symbian應(yīng)用的話這種方式有點(diǎn)像活動(dòng)對象,好處就是單線

程更節(jié)省系統(tǒng)開銷,N1。的好處可以很好的解決并發(fā),對于Android網(wǎng)游開發(fā)來說比較關(guān)

鍵,對于多點(diǎn)Socket連接而言使用NIO可以大大減少線程使用,減少了線程死鎖的概率,

畢竟手機(jī)游戲有UI線程,音樂線程,網(wǎng)絡(luò)線程,管理的難度可想而知,同時(shí)I/O這種低速設(shè)

備將影響游戲的體驗(yàn)。NIO作為一種中高負(fù)載的1/0模型,相對于傳統(tǒng)的BIO(B

lockingI/O)來說有了很大的提高,解決并發(fā)不用太多的線程,省去了創(chuàng)建銷毀的時(shí)間,假

如線程過多調(diào)度是問題,同時(shí)很多線程也許處在空閑狀態(tài),大大浪費(fèi)了CPU時(shí)間,同時(shí)過

多的線程也許是性能大幅下降,一般的解決方案中也許使用線程池來管理調(diào)度但這種方法治

標(biāo)不治本。使用NIO可以使并發(fā)的效率大大提高。當(dāng)然NIO和JDK7中的AIO還存在一

些區(qū)別,AI0作為一種更新的當(dāng)然這是對于Java而言,假如你開發(fā)過Winsock服務(wù)器,

那么10CP這樣的I/0完畢端口可以解決更高級的負(fù)載,當(dāng)然了今天Android123重要給

大家講解下為什么使用NI0在Andr。id中有哪些用處。NIO我們分為幾個(gè)類型分

別描述,作為Java的特性之一,我們需要了解一些新的概念,比如ByteBuffer類,Ch

annel.SocketChannel,ServerSocketChannel,Seiector和SelectionKey。有

關(guān)具體的使用,Andr。id開發(fā)網(wǎng)將在明天具體講解。網(wǎng)友可以在AndroidSDK文

檔中看下java.nio和java.nio.channels兩個(gè)包了解。

了解下這種技術(shù),看看在立即要做的項(xiàng)目中是否用得到

10.AndroidTheme和Sty1es內(nèi)部定義解析

昨天我們講到的有關(guān)在AndroidManifest.xml中定義Activity的theme方法來實(shí)現(xiàn)無

標(biāo)題的方法,在便用xml讓你的Activity無h一文中講到的,很多網(wǎng)友不明白為

什么這樣做淇實(shí)在Andr。id123以前的文章中多次提到了styles樣式定義方法,今

天Android開發(fā)網(wǎng)再次把一些網(wǎng)友回顧了解下android樣式的內(nèi)部定義。在一個(gè)工程的r

es/values/theme.xm1中我們可以方便的定義自己的風(fēng)格主題,比如下面的

cwjTheme中我們使用了基于android內(nèi)部的白色調(diào)的背景Theme.Light,設(shè)立win

dowsNoTItle為true代表沒有標(biāo)題,背景顏色我們使用了android內(nèi)部定義的透明,

同時(shí)設(shè)立IistView控件的樣式為cwjListView,xml樣式代碼如下:

[html]viewplaincopyprint?

1.<?xmlversion="1.0"encoding="utf—8*'?>

2.<resources>

3.<sty1ename=HcwjTheme**parent="android:

Theme.Light”>

4.<itemname="android:windowNoTitleH>true</item>

5.<itemname=nandroid:windowBackground”>@andro

id:color/transparent</item>

6.<itemname="androiddistViewStyle”>@sty1e/cwjListV

iew</item>

7.</style>有關(guān)ListView控件我們自定義的風(fēng)格就是修改下系統(tǒng)1

istview這個(gè)控件的每行分隔符樣式,這里我們在工程下res/drawab

Ie文獻(xiàn)夾下放一個(gè)圖片名為list_selector圖片,這樣我們的cwjL

istVjew的代碼可以這樣寫〈stylename="c

wjListView”parent=M@android:sty1e/Widget.ListView's

8.<itemname="android:listSe1ectorH>@drawable/list_se

lector</item>

9.</style>

10.</resources>通過定義styIe可以設(shè)立更多,比如讓cwjListVie

w的字體顏色就加入textAppearance屬性,比如<itemname=Hte

xtAppearancen>@android:style/TextAppearance<

/item>

A1I.AndroidJSON解析示例代碼

來自GoogIe官方的有關(guān)Android平臺的JSON解析示例,假如遠(yuǎn)程服務(wù)器使用了json而

不是xml的數(shù)據(jù)提供,在Android平臺上已經(jīng)內(nèi)置的org.js。n包可以很方便的實(shí)現(xiàn)手機(jī)

客戶端的解析解決。下面Android123一起分析下這個(gè)例子,幫助Android開發(fā)者需要

有關(guān)HTTP通訊、正則表達(dá)式、JSON解析、appWidget開發(fā)的一些知識。

Ejava]viewplaincopyprint?

1.publiccIassWordWidgetextendsAppWidgetProvide

r{//appWidget

2.@Override

3.publicvoidonUpdate(Contextcontext,AppWidget

ManageraPpWidgetManager,

4.intL]appWidgetlds){

5.context.startService(newIntent(context,UpdateSer

vice.c1ass));//避免ANR,所以Widget中開了個(gè)服務(wù)

6.}publicstaticclassUpdateServiceextendsS

ervice{

7.@Override

8.publicvoidonStart(lntentintent,intstartId){

9.//Buildthewidgetupdatefortoday

10.RemoteViewsupdateViews=buiIdUpdate(th

is);ComponentNamethisWidget=newComp

onentName(this,WordWidget.c1ass);

11.AppWidgetManagermanager=AppWjdgetManag

er.getInstance(this);

12.manager.updateAppWidget(thisWidget,updat

eViews);

13.}publicRemoteViewsbui1dUpdat

?(Contextcontext){

14.//Pickoutmonthnamesfromresources

15.Resourcesres=context,getResources();

16.String[]monthNames=res.getStringArray(R.arr

ay.month_names);Timetoday=newTime();

17.today.setToNow();StringpageName=res.

getString(R.string.temp1ate_wotd_titie,

18.monthNames[today.month],today.mont

hDay);

19.RemoteViewsupdateViews=null;

20.StringpageContent=,m;try{

21.SimpleWikiHeIper,prepareUserAgent(context);

22.pageContent=SimpleWikiHelper.getPageCon

tent(pageName,false);

23.}catch(ApiExceptione){

24.Log.e(nWordWidget","Cou1dn*tcontactAP

IM,e);

25.}catch(ParseExceptione){

26.Log.e("WordWidgetn,,'Couldn,tparseAPIrespons

e",e);

27.}Patternpattern=Pattern.compi1e(Si

mpleWikiHelper.WORD_OF_DAY_REGEX);〃正則表達(dá)式解

決,有關(guān)定義見下面的SimpleWikiHelper類

28.Matchermatcher=pattern.mateher(pageCon

tent);

29.if(matcher.find()){

30.updateViews=newRemoteViews(context.

getPackageName(),R.Iayout.widget_wor

d);StringwordTit1e=matcher.group(1);

31.updateViews.setTextViewText(R.id.word_tit

1e,wordTitle);

32.updateViews.setTextviewText(R.id.wordjype,mate

her.group(2));

33.updateViews.setTextViewText(R.id.definitio

n,matcher.group(3).trim());StringdefinePag

e=res.getString(R.string,template_define_ur1,

34.Uri.encode(wordTit1e));

35.IntentdefineIntent=newIntent(lntent.ACTI

ON_VIEW,Uri.parse(definePage));〃這里是打開相應(yīng)的網(wǎng)頁,所

以Uri是http的url,action是view即打開web瀏覽器

36.PendingIntentpendinglntent=Pendinglnten

t.getActivity(context,

37.0/*norequestCode*/,defineIntent,0/*nofI

ags*/);

38.updateViews.setOnC1ickPendingintent(R.id.wid

get,pendinglntent);//單擊Widget打開Activity}e

Ise(

39.updateViews=newRemoteViews(context.get

PackageName(),R.layout.widget_message);

40.CharSequeneeerrorMessage=context.getTex

t(R.string.widget_error);

41.updateViews,setTextViewText(R.id.messag

e,errorMessage);

42.)

43.returnupdateViews;

44.}@Override

45.publicIBinderonBind(Intentintent){

46.//Wedon'tneedtobindtothisservice

47.returnnull;

48.}

49.}

50.}有關(guān)網(wǎng)絡(luò)通訊的實(shí)體類,以及一些常量定義如下:Publicclas

sSimpleWikiHelper{

51.privatestaticfinalStringTAG=nSimp1eWi

kiHelper";publicstaticfinalStringWORD—O

F_DAY_REGEX=

52.H(?s)\\{\\{wotd\\|(.+?)\\|(.+?)\\|([^#\\|]+).*?\\}\

\}";privatestaticfinalStringWIKTIONARY__PAGE=

53."H+

54."rvprop=content&format=json%sn;privatesta

ticfinalStringWIKTIONARY_EXPAND_TEMPLATES=

55."&rvexpandtemplates=trueM;privatestaticfin

aIintHTTP_STATUS_OK=200;privatestaticbyte

[]sBuffer=newbyte[512];privatestaticStringsUse

rAgent=null;publicstaticcIassApiExceptionextendsExc

eption{

56.publicApiException(StringdetailMessage,Throwa

blethrowabIe){

57.super(detailMessage,throwab1e);

58.}publicApiException(StringdetaiiMessage){

59.super(detailMessage);

60.)

61.}publicstaticclassParseExceptionextendsEx

ception{

62.publicParseException(StringdetailMessag

e,Throwablethrowable){

63.super(detailMessage,throwab1e):

64.)

65.}pub1icstaticvoidprepareUserAgent(Contextcont

ext){

66.try{

67.//Readpackagenameandversionnumberfr

ommanifest

68.PackageManagermanager=contex

t.getPackageManager();

69.Packagelnfoinfo=manager.getPackageinfo

(context.getPackageName(),0);

70.sUserAgent=String.format(context.getString(R.s

tring.template_user_agent),

71.info.packageName,info.versi

onName);}catch(NameNotFoundExceptione){

72.Log.e(TAG,*'Couldn'tfindpackageinformat

ioninPackageManager”,e);

73.}

74.}publicstaticStringgetPageContent(Stringtit

Ie,booleanexpandTemplates)

75.throwsApiException,ParseException{

76.StringencodedTitIe=Uri.encode(titie);

77.StringexpandCIause=expandTemp1ates?WIKTION

ARY_EXPAND_TEMPLATES:Stringcontent=getUrl

Content(String.format(WIKTIONARY_PAGE,encodedTitl

e,expandClause)):

78.try{

79.JSON0bjectresponse=newJSONObject(conten

t);

80.JSONObjectquery=response.getJSONObject

(Hquery");

81.JSONObjectpages=query.getJSONObject("

pages");

82.JSONObjectpage=pages.getJSONObject((S

tring)pages.keys().next());

83.JSONArrayrevisions=page.getJS0NArray("rev

isions”);

84.JSONObjectrevision=revisions.getJSONObjec

t(0);

85.returnrevision,getString("*");

86.}catch(JSONExceptione){

87.thrownewParseException('*Prob1emparsingAP

Iresponsee);

88.)

89.}protectedstaticsynchronizedStringgetUrIContent(St

ringurI)throwsApiException{

90.if(sUserAgent==null){

91.thrownewApiException("User-Agentstringmu

stbeprepared");

92.}HttpCIientclient=newDefaultHttpCIient();

93.HttpGetrequest=newHttpGet(ur1);

94.request.setHeader(HUser-Agent*',sUserAgent);//設(shè)立

客戶端標(biāo)記try(

95.HttpResponseresponse=dient.execute(reques

t);StatusLinestatus=response.g

etStatusLine();

96.if(status.getstatusCode()!=HTTP_STATUS_

OK){

97.thrownewApiException("Invalidresponsefromse

rver:M+

98.status.toString());

99.}HttpEntityentity=response.getEntity();

100.InputstrearninputStream=entity.getConten

t();//獲取HTTP返回的數(shù)據(jù)流ByteArrayOutputStrea

mcontent=newByteArrayOutputStream();intread

Bytes=0;

101.while((readBytes=inputstream.read(sBuffer))!

=-1){

102.content.write(sBuffer,0,readBytes);//轉(zhuǎn)化

為字節(jié)數(shù)組流

103.}returnnewString(content.toByteArray

());〃從字節(jié)數(shù)組構(gòu)建String

104.}catch(IOExceptione){

105.thrownewApiException(HProblemcommunic

atingwithAPI”,e);

106.}

107.}

108.}

關(guān)整個(gè)每日維基的widget例子比較簡樸,重要是幫助大家積累常用代碼,了解Android平

臺JSON的解決方式,畢竟很多Se「ver還是Java的。

12.Android中使用定期器TimerTask類介紹

在Android平臺中需要反復(fù)按周期執(zhí)行方法可以使用Java上自帶的TimerTask類,Tim

erTask相對于Thread來說對于資源消耗的更低,除了使用Android自帶的AlarmM

anager使用Timer定期器是一種更好的解決方法。

我們需要引入importjava.util.Timer;和importjava.util.TimerTask;

[java]viewp1aincopyprint?

1.<PREclass=javaname="code">privateTim

ermTimer=newTimer(true);

2.privateTimerTaskmTimerTask;mTimerTask=newT

imerTask()

3.(

4.publicvoidrun()

5.(

6.Log.v(nandroid123n,"cwjH);

7.)

8.);

9.</PRE>

10.<PxBR>

11.</P>

12.<PREclass=javaname="codeH>mTimer.schedule(mTime

rTask,5000,1000)"/在1秒后每5秒執(zhí)行一次定期器中的方法,

比如本文為調(diào)用log.v打印輸出。假如想取消可以調(diào)用下面方法,取

消定期器的執(zhí)行while(!mTimerTask.cance1());

13.mTimer.cance1();最后Android123提醒大家,假如解決的東西

比較耗時(shí)還是開個(gè)線程比較好,Timer還是會(huì)阻塞主線程的執(zhí)行,更像是

一種消息的執(zhí)行方式。當(dāng)然比Handler的postDelay等方法更適合

解決計(jì)劃任務(wù)。

14.</PRE>

15.<PRE></PRE>

16.<P>13.Android應(yīng)用Icon大小在不同分辨率下定義v/P>

17.vBLOCKQUOTE>對于Android平臺來說,不同分辨率下Icon

的大小設(shè)計(jì)有著不同的規(guī)定,對于目前主流的HDPI即WVGA級別來

說,通常hdpi的應(yīng)用icon大小為72x72,而標(biāo)準(zhǔn)的mdpi即hvga為

48x48,對于目前HTC和Motorola推出的一些QVGA的使用了1dp

i,圖標(biāo)為32x32,常見的Android圖標(biāo)大小設(shè)計(jì)規(guī)范如下表所示:

18.<STRONG>Launcher<BR>

19.36x36px<BR>

20.48x48px<BR>

21.72x72pxMenu<BR>

22.36x36px<BR>

23.48x48px<BR>

24.72x72pxStatusBar<BR>

25.24x24px<BR>

26.32x32px<BR>

27.48x48pxTab<BR>

28.24x24px<BR>

29.32x32px<BR>

30.48x48pxDialog<BR>

31.24x24px<BR>

32.32x32px<BR>

33.48x48pxListView<BR>

34.24x24px<BR>

35.32x32px<BR>

36.48x48px</STRONG>對于android界面設(shè)計(jì)的安全色,如下表<

IMGborder=0aIt=0*'src=n"width=523height=303>而對于系統(tǒng)

自帶默認(rèn)程序的圖標(biāo),下面為png的透明格式,直接鼠標(biāo)右鍵另存為即可

37.<IMGborder=0alt=,H,src“width=532height=348><B

R>

38.</BLOCKQUOTE>

39.vp>看看sdk文檔上的關(guān)于界面圖標(biāo)的具體說明。14.Android控件

美化Shape你會(huì)用嗎?</P>

40.〈BLOCKQUOTE,假如你對Android系統(tǒng)自帶的UI控件感覺不夠滿

意,可以嘗試下自定義控件,我們就以Button為例,很早以前Andro

id123就寫到過vAhref='n,target=_b1ank><SPANstyle=MC

OLOR:#56b6e9M>AndroidButton按鈕控件美化方法v/SP

AN>v/A>里面提到了xml的selector構(gòu)造。當(dāng)然除了使用drawable這

樣的圖片外今天Android開發(fā)網(wǎng)談下自定義圖形shaPe的方法,對于

Button控件Android上支持以下幾種屬性shape、gradient、

strokecorners等。

41.我們就以目前系統(tǒng)的Button的selector為例說下:v/BLOCK

QUOTE>

42.<PREclass=htm1name=Mcode"><shape>

43.<gradient

44.android:startCo1or=n#ff8c00M

45.android:endColor="#FFFFFF',

46.android:angle=n270n/>

47.<stroke

48.android:width="2dp”

49.android:color="#dcdcdcH/>

50.<corners

51.android:radius=H2dp”/>

52.<padding

53.android:left="10dp"

54.android:top=,,10dpM

55.android:right='10dp"

56.android:bottom="10dp"/>

57.</shape></PRE>

58.<PxBR>

59.對于上面,這條shape的定義,分別為漸變,在gradient中start

Color屬性為開始的顏色,endColor為漸變結(jié)束的顏色,下面的ang1

e是角度。接下來是stroke可以理解為邊沿,corners為拐角這里

radius屬性為半徑,最后是相對位置屬性padding。對于一個(gè)

Button完整的定義可認(rèn)為v/P>

60.<PREclass=htm1name=Hcoden><?xm1version="

1.0"encoding="utf-8n?>

61.<selector

62.xmlns:android="

63.<itemandroid:state_pressed=ntrue">

64.<shape>

65.<gradient

66.android:startCo1or="#ff8c00"

67.android:endColor=M#FFFFFFH

68.android:angle="270*'/>

69.<stroke

70.android:width="2dp”

71.android:color=H#dcdcdc"/>

72.<corners

73.android:radius="2dp"/>

74.<padding

75.android:left=H1Odp”

76.android:top="10dp”

77.android:right=M10dp"

78.android:bottom=n1Odp”/>

79.</shape>

80.</item><itemandroid:state_focused=Htrue">

81.<shape>

82.<gradient

83.android:startColor=,'#ffc2bT

84.android:endColor=H#ffc2b7”

85.android:angle="270n/>

86.<stroke

87.android:width="2dp”

88.android:color=H#dcdcdc"/>

89.<corners

90.android:radius=*'2dp"/>

91.<padding

92.androiddeft=H1Odp”

93.android:top="10dp”

94.android:right=n1Odp"

95.android:bottom=,,10dp”/>

96.</shape>

97.</item><item>

98.<shape>

99.<gradient

100.android:startColor=H#ff9d77”

101.android:endColor="#ff9d77”

102.android:ang1e=n270u/>

103.<stroke

104.android:width="2dp”

105.android:color='#fad3cfM/>

106.<corners

107.android:radius='*2dp"/>

108.<padding

109.android:left="10dp”

110.android:top=n1Odp"

111.android:right=TOdp”

112.android:bottom=n10dp"/>

113.</shape>

114.</item>

115.</selector></PRE>

116.<P><BR>

117.注意Android123提醒大家似上幾個(gè)計(jì)em的區(qū)別重要是體現(xiàn)在s

tate_pressed按下或state_focused獲得焦點(diǎn)時(shí),當(dāng)當(dāng)來判斷

顯示什么類型,而沒有state_xxX屬性的item可以看作是常規(guī)狀態(tài)

下。<BR>

118.15.Android開發(fā)者應(yīng)當(dāng)保持以下特質(zhì)v/P>

119.<BLOCKQU0TE>Android123推薦新手應(yīng)當(dāng)遵循1.深讀

SDK文檔2.深讀SDK的APIDemo和Samples3.掌握GIT

開源代碼4.多了解Android開源項(xiàng)目,學(xué)習(xí)別人的手法寫程序。

<BR>

120.</BLOCKQUOTE>

121.<P>16.Android數(shù)組排序常見方法V/P>

122.<BLOCKQUOTE>Android的數(shù)組排序方式基本上使用了

Sun原生的JavaAPI實(shí)現(xiàn),常用的有Comparator接口實(shí)現(xiàn)com

Pare方法和Comparable接口的compareTo方法,我們對于

一個(gè)數(shù)組列表比如ArrayList可以通過這兩個(gè)接口進(jìn)行排序和比較,

這里Android123給大家一個(gè)例子

123.</BLOCKQUOTE>

124.<PREclass=javaname="code*'>privatefinaIComparat

orcwjComparator=newComparator(){privatefi

nalCo1lato

溫馨提示

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

評論

0/150

提交評論