版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 烤漆作業(yè)標(biāo)準(zhǔn)指南
- 2026年泉州輕工職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及參考答案詳解一套
- 《正常人體功能》課件-體溫
- 勞務(wù)派遣人員工資支付擔(dān)保協(xié)議
- 中藥材行業(yè)中藥提取技術(shù)員崗位招聘考試試卷及答案
- 2026年小學(xué)生心理健康教育工作計(jì)劃
- 2025年固體分散載體材料項(xiàng)目合作計(jì)劃書
- 2025年放射性污染防治合作協(xié)議書
- 術(shù)后虛弱的飲食調(diào)養(yǎng)
- 遼寧省2025秋九年級英語全冊Unit3Couldyoupleasetellmewheretherestroomsare課時(shí)3SectionA(GrammarFocus-4c)課件新版人教新目標(biāo)版
- 利尿藥分類講課件
- 企業(yè)保護(hù)水環(huán)境活動(dòng)方案
- 事故汽車修復(fù)技術(shù)規(guī)范標(biāo)準(zhǔn)詳
- 江蘇省無錫市2023-2024學(xué)年高一下學(xué)期期末考試物理試題(解析版)
- 胃癌術(shù)后常見并發(fā)癥
- JJF 2173-2024 高錳酸鹽指數(shù)分析儀校準(zhǔn)規(guī)范
- C語言編程方法與思想知到課后答案智慧樹章節(jié)測試答案2025年春北京航空航天大學(xué)
- 2025至2030年救生衣項(xiàng)目投資價(jià)值分析報(bào)告
- 《逸仙電商經(jīng)營管理模式分析》2000字
- 裝飾裝修工程質(zhì)量評估報(bào)告
- 護(hù)理三基試題匯編1000題(含答案)
評論
0/150
提交評論