今天Android學(xué)習(xí)第二天
1.Android項目結(jié)構(gòu)
2. Activity生命周期
3.Studio使用
4.button點擊打開另一個activity
5.組件定義及相關(guān)組件介紹
6.資源組織及訪問
7.Service 生命周期
題外話:Studio(Android開發(fā)工具) XCode(Apple開發(fā)工具)
a.Studio輸入提示區(qū)分大小寫,確實不方便,這點不如XCode好用霸褒。
b.Studio在資源組織和訪問方便統(tǒng)一性比較高掐暮,不需要用戶再考慮資源如何放置芹助,靈活性不夠洪囤,但對目前Android小白的我還是挺好用的跑慕。
c.AndroidManifest.xml實現(xiàn)松解耦万皿,不需要遍地引用頭文件。iOS上的sting方式實現(xiàn)頁面間跳轉(zhuǎn)與此設(shè)計模式一致。
一相寇、Android項目結(jié)構(gòu)
1.無論您作為應(yīng)用程序的一部分開發(fā)什么組件慰于,都必須在AndroidManifest.xml中聲明其所有組件。這個文件作為Android OS和應(yīng)用程序之間的接口唤衫,所以如果沒有在這個文件中聲明你的組件婆赠,那么操作系統(tǒng)將不會考慮它。
2.res/mipmap
需要更多地了解mipmap文件夾中的圖像佳励,請參閱下面的圖像休里,mipmap文件夾中有一個圖像文件。
在使用Android應(yīng)用程序時偶爾遇到的一個問題是赃承,比如看到的圖像比較模糊妙黍,像素化或笨拙地拉伸。 解決此問題的方法是為Android支持的每種密度創(chuàng)建一個可繪制的文件夾瞧剖,并將正確縮放的圖像放在每個文件夾中拭嫁。 Android支持6種不同的密度范圍(以每英寸點數(shù)衡量):
ldpi:低密度屏幕; 大約120dpi。
mdpi:中等密度(在傳統(tǒng)的HVGA)屏幕上; 大約160dpi抓于。
hdpi:高密度屏幕; 大約240dpi做粤。
xhdpi:超高密度屏幕; 大約320dpi。 在API級別8中添加
nodpi:這可以用于位圖資源捉撮,不想縮放到匹配設(shè)備密度怕品。
tvdpi:屏幕介于mdpi和hdpi之間; 大約213dpi。這不被視為“主要”密度組巾遭。 它主要用于電視機(jī)肉康,大多數(shù)應(yīng)用程序不需要它 - 為大多數(shù)應(yīng)用程序提供mdpi和hdpi資源已足夠,系統(tǒng)將根據(jù)需要進(jìn)行擴(kuò)展灼舍。此限定符是在API級別13中引入的吼和。
具體引入方法在資源組織及訪問中會說到。
二骑素、Android Activity 生命周期
首先炫乓,了解Activity是什么?
Activity是支持屏幕或UI的Java代碼砂豌。換句話說厢岂,用戶界面的構(gòu)建塊就是Activity光督。Activity類是Android中的一個預(yù)定義類阳距,每個擁有UI的應(yīng)用程序都必須繼承它來創(chuàng)建窗口。
例如结借,MainActivity類是一個Activity筐摘,它從庫中的Activity類擴(kuò)展而來。 下圖說明了一個Activity的生命周期。
Activity的一個生命周期描述了一個Activity開始啟動后的進(jìn)程咖熟,直到應(yīng)用程序關(guān)閉圃酵。 包括Activity暫時停止的進(jìn)程,恢復(fù)等等馍管。
根據(jù)Activity的生命周期郭赐,在需要的地方實現(xiàn)對應(yīng)的方法。這一塊和iOSviewController中的生命周期類似确沸。
三捌锭、studio工具使用:
(以下只是今天學(xué)習(xí)到的,后續(xù)持續(xù)補(bǔ)充)
1.查看logCat罗捎,view- tools window-Logcat
2.@Override是偽代碼,表示重寫.編譯器可以給你驗證@Override下面的方法名是否是你父類中所有的,如果沒有則報錯?
3.Studio中添加好用的插件,
路徑:Android Studio-Preferences-Plugins-Browse repositories-選擇需要的插件點擊install
前提Mac pro中的studio观谦。
3.在android中經(jīng)常看到設(shè)置的顏色為八位的十六進(jìn)制的顏色值桨菜,例如:
public?static?final?class?color?{
?? ?public?static?final?int?lightblue=0x7f040000;
}
或者在Java中tx.setTextColor(0xffff00f);
說明:
0xffff00ff是int類型的數(shù)據(jù)豁状,分組一下0x|ff|ff00ff,0x表示顏色整數(shù)的標(biāo)記倒得,ff表示透明度泻红,f00f表示色值,注意:0x后面ffff00ff必須是8位的顏色表示屎暇。
顏色和不透明度?(alpha)?值以十六進(jìn)制表示法表示承桥。任何一種顏色的值范圍都是?0到?255(00到?ff)。
對于 alpha根悼,00表示完全透明凶异,ff表示完全不透明。
表達(dá)式順序是“aabbggrr”挤巡,其中“aa=alpha”(00到ff)剩彬;“bb=blue”(00到ff);“gg=green”(00到ff)矿卑;“rr=red”(00到ff)喉恋。
3.2、Android中設(shè)置文本顏色的四種方法:
3.2.2母廷、利用系統(tǒng)自帶的顏色類
tx.setTextColor(android.graphics.Color.RED);
3.2.3轻黑、數(shù)字顏色表示
tx.setTextColor(0xffff00f);
3.2.4、自定義顏色
在工程目錄values文件夾下新建一個color.xml琴昆,內(nèi)容如下:
color.xml中也可用color標(biāo)簽#ffff0000????
java中設(shè)置相應(yīng)改為:
tx.setTextColor(tx.getResources().getColor(R.color.red));
3.2.5氓鄙、直接在xml的TextView中設(shè)置
android:textColor="#F8F8FF00"?或
android:textColor="#F8FF00”
四、button點擊打開另一個activity
兩種方法:
方法一:
1.在A頁面的xml文件(layout布局文件)中初始化button业舍,設(shè)置button的idandroid:id="@+id/clickBtn"
2.在A頁面的java文件中抖拦,關(guān)聯(lián)xml中的button
? ?第一步:
聲明btn: private?Button?btn1;
? 第二步:在onCreate方法中將button關(guān)聯(lián)
?// 將xml中button和java中的button進(jìn)行關(guān)聯(lián)
btn1?= (Button)findViewById(R.id.clickBtn);
?第三步:給btn1綁定點擊事件
btn1.setOnClickListener(new?View.OnClickListener() {
?@Override
?public void?onClick(View view) {
Log.i(TAG,?"clickToast:click button");
? ? }
});
第四步:初始化B頁面的java文件升酣,superclass設(shè)置為:android.app.Activity
?在B的java文件中導(dǎo)入import?android.os.Bundle; 重寫onCreate方法:其中R.layout.my的my是B頁面的xml文件名稱
?@Override
?protected void?onCreate(Bundle savedInstanceState) {
//?TODO Auto-generated method stub
?super.onCreate(savedInstanceState);
??????????? setContentView(R.layout.my);}
第五步:在AndroidManifest.xml中
// 加入新的頁面?
<activity android:name=".Test"></activity>
第六步實現(xiàn)點擊方法:
btn1.setOnClickListener(new?View.OnClickListener() {
?@Override
?public void?onClick(View view) {
Log.i(TAG,?"clickToast:click button");
Intent intent =?new?Intent();
intent.setClass(MainActivity.this,Test.class);
??????? startActivity(intent);
??? }
});
方法二:直接A頁面的xml文件中設(shè)置點擊方法:
android:onClick=“startService"
在java中實現(xiàn)startService方法
protected void?startService(View view){
??? startService(new?Intent(getBaseContext(),MyService.class));
}
下面這種方法更方便點,不用重新聲明綁定态罪。
五噩茄、組件定義及相關(guān)組件介紹
在Android應(yīng)用程序中可以使用以下四個主要組件:
在構(gòu)建上述實體時,還會使用其他組件复颈,它們的邏輯和它們之間的連線绩聘。 這些組件是
后續(xù)補(bǔ)充相關(guān)用法。
六耗啦、資源組織及訪問
在許多Android項目中君纫,有很多東西要用來建立一個良好的Android應(yīng)用程序。除了編碼應(yīng)用各種資源芹彬,如:位圖蓄髓,顏色,布局定義舒帮,用戶界面字符串会喝,動畫,靜態(tài)內(nèi)容玩郊。在res/目錄下肢执,浙西資源一直保存在各自子目錄中。
簡單目錄結(jié)構(gòu)
MyProject/
? ?src/
? ? ? MyActivity.java
? ?res/
? ? ? drawable/
? ? ? layout/
? ? ? ? ?Activity_main.xml
? ? ? values/
? ? ? ? ? Strings.xml
res/目錄中包含不同的子目錄的不同資源译红。在這里有一個圖像資源预茄,兩個布局資源和一個字符串資源文件。下表給出了詳細(xì)的項目在 res/目錄里面支持的資源侦厚。
替代資源
應(yīng)用程序提供替代資源以支持特定的設(shè)備配置耻陕。例如,包括替代繪制資源(ie.images)刨沦,針對不同的語言不同的屏幕分辨率并替代字符串資源诗宣。在運(yùn)行時Android 檢測當(dāng)前設(shè)備的配置,并為應(yīng)用程序加載適當(dāng)?shù)馁Y源想诅。
要指定一組資源的配置具體的替代召庞,請遵循以下步驟:
創(chuàng)建新目錄在res/ 目錄下,命名形式如?-来破。這里resources_name 是在上表中提到的資源篮灼,如layout,drawable?等限定符將指定一個單獨(dú)的配置徘禁,要使用這些資源诅诱。可以查看官方文檔的完整列表晌坤,限定符為不同類型的資源逢艘。
在這個新的目錄中保存相應(yīng)的替代資源。資源文件必須被命名為默認(rèn)的資源文件骤菠,如下面的例子所示的完全一樣它改,但這些文件具有特定內(nèi)容的替代。例如商乎,雖然圖像的文件名是相同的央拖,但對高分辨率屏幕,其分辨率會很高鹉戚。
下面是一個例子鲜戒,它指定一個默認(rèn)的屏幕和高分辨率屏幕的替代圖像的圖像。
MyProject/
??? src/?
??????? MyActivity.java?
?res/
??????? drawable/?
??????????? icon.png
??????????? background.png
?drawable-hdpi/?
??????????? icon.png
??????????? background.png?
??????? layout/?
??????????? activity_main.xml
??????????? info.xml
??????? values/?
??????????? strings.xml
訪問資源
在應(yīng)用程序開發(fā)中抹凳,需要訪問定義的資源遏餐,無論是在代碼還是在布局XML文件。下面的部分介紹了如何訪問資源在這兩個場景:
訪問資源代碼
當(dāng)Android應(yīng)用程序被編譯時赢底,會產(chǎn)生一個R類失都,其中包含在res/?目錄中的所有可用資源的資源ID。使用R類直接訪問該子目錄和資源名稱或資源ID幸冻。?
示例:
要訪問?res/drawable/myimage.png粹庞,并設(shè)置一個ImageView 可使用下面的代碼:
ImageViewimageView?=(ImageView)findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
七、Service 生命周期
Service(服務(wù))是一種在后臺運(yùn)行洽损,執(zhí)行長時間運(yùn)行的操作庞溜,無需與用戶交互的組件。例如碑定,一個服務(wù)可以在后臺播放音樂流码,用戶在不同的應(yīng)用程序或者可能通過網(wǎng)絡(luò)獲取數(shù)據(jù),而不阻塞用戶交互活動延刘。本質(zhì)上旅掂,一個服務(wù)可以采取兩種狀態(tài):
Started:當(dāng)一個應(yīng)用程序組件,如活動访娶,開始通過調(diào)用StartService()啟動一個服務(wù)商虐。開始以后服務(wù)可以無限期地在后臺運(yùn)行,即使啟動它的組件被破壞崖疤。?
Bound:當(dāng)一個應(yīng)用程序組件綁定調(diào)用bindService()方法綁定服務(wù)秘车。綁定服務(wù)提供客戶端 - 服務(wù)器的接口,允許組件進(jìn)行交互的服務(wù)劫哼,發(fā)送請求叮趴,得到結(jié)果,這樣可以跨進(jìn)程進(jìn)程間通信(IPC)权烧。
今天學(xué)習(xí)的理論知識比較多眯亦,好好記憶伤溉,多多練習(xí),還得寫項目才能更深刻的體會這些理論妻率。加油