android 工程结构,它到底是怎么运行的。
| 為了幫助理解,我決定先上傳一個(gè)工程截圖,這個(gè)是我做的一個(gè)小作業(yè),3、4個(gè)小時(shí)完成,沒(méi)什么含金量,就是交差用的,這里給大家做個(gè)模板吧。 ? 我把一個(gè)工程分6個(gè)部分,如左面的圖所示,然后來(lái)一一說(shuō)好了。 1. 這里就是存放我們寫的類的,由于我這個(gè)簡(jiǎn)單,就沒(méi)有分很多包了,一個(gè)包搞定一切。 2. 這個(gè)是編譯生成的,里面有個(gè)R.java文件,千萬(wàn)不要亂動(dòng)它,會(huì)導(dǎo)致很可怕的錯(cuò)誤,另外,如果明明寫的很對(duì),但是就是編譯通不過(guò)的話,一定是這個(gè)東西除了問(wèn)題,可以上網(wǎng)搜搜解決辦法,不知道能不能刪了這個(gè)文件重新編譯。 3. 這個(gè)三個(gè)文件夾是用來(lái)放圖片的,比如自己做的按鈕啊什么的,分高(hdpi)中(mdpi)低(ldpi)三種像素圖片文件夾,在不同屏幕下調(diào)用不同像素的圖片。 4. 看名字就知道,這是些UI的地方,這里寫好了以后,在java文件里調(diào)用。 5. 這個(gè)是存放一些字符串的,比如有些字符串常用到啊,多處被引用的話,就給它取個(gè)名字放到這里,然后就可以實(shí)現(xiàn)字符串共享了。 6. 就是上一篇介紹過(guò)的,聲明activity和權(quán)限的地方。 ? 所以,綜上所述,一個(gè)android程序被運(yùn)行的時(shí)候,程序先在manifest文件里找到入口類,然后進(jìn)入入口類的onCreate()函數(shù)開始執(zhí)行,其中UI在layout文件夾中調(diào)用,圖片在res文件夾中調(diào)用。 ? |
接下來(lái)我們進(jìn)入代碼,用代碼稍微分析一下,就清楚了:
?
首先,我們看到在manifest文件里申明了入口類是SecretDiaryActivity.java:
<activity android:name=".SecretDiaryActivity"android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
接著我們進(jìn)入到SecretDiaryActivity.java文件,找到onCreate()函數(shù):
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.diary_list);
mDbHelper = new DiaryDbAdapter(this);
ll=(LinearLayout)findViewById(R.id.bg); //part one
mDbHelper.open();
// code=(EditText)
//取回所有庫(kù)中的日記顯示
// if(currentbg)
if(mDbHelper.isCode()){
Intent i = new Intent(this, EnterPage.class);
startActivityForResult(i, ACTIVITY_ENTER);
}
int bg=mDbHelper.getbg();
Resources resources = getBaseContext().getResources();
Drawable btnDrawable=resources.getDrawable(R.drawable.bg);
switch(bg){
case 0:
break;
case 1:
btnDrawable=resources.getDrawable(R.drawable.bg2);
break;
case 2:
btnDrawable=resources.getDrawable(R.drawable.bg3);
break;
}
ll.setBackgroundDrawable(btnDrawable);
renderListView(); //part two
}
可以看到,setContentView(R.layout.diary_list);這一句,就是定義了這個(gè)activity的layout調(diào)用的是哪個(gè)xml文件。
順帶看一下,標(biāo)注了part one的這一句,就是用來(lái)申明一個(gè)UI的,根據(jù)ID來(lái)查找布局,這個(gè)時(shí)候我們就需要找到名字叫做bg的一個(gè)LinearLayout,這個(gè)時(shí)候用到的就是上面的第二部分,gen文件夾下的R.java文件,編譯器從這里找到bg的物理地址,我們看到bg的定義其實(shí)在diary_list.xml文件中:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/bg"
>"
<ListView android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>"
<TextView android:id="@+id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"? android:text="還沒(méi)有開始寫日記哦親!\n點(diǎn)擊Menu按鈕開始寫日記吧:)"
android:layout_margin="20px"
android:textSize="17px"
android:textStyle="bold"
android:textColor="#000"
/>
</LinearLayout>
文件第五行進(jìn)行了對(duì)一個(gè)layout布局的id定義,這里任何一個(gè)控件,布局,都可以給它一個(gè)id,以方便在java文件中調(diào)用并操作它,利用ID找到它之后,我們就可以通過(guò)ll來(lái)操作它了,比如這里我用ll給bg設(shè)置了一個(gè)背景。
這就是一個(gè)android軟件的大致架構(gòu)了,知道了運(yùn)作流程,可以很方便的知道什么時(shí)候該在哪里寫東西了,接下來(lái)如何去做具體的功能還是要查看官方的guide了~。
轉(zhuǎn)載于:https://www.cnblogs.com/jiaozihardworking/archive/2012/02/13/2350011.html
總結(jié)
以上是生活随笔為你收集整理的android 工程结构,它到底是怎么运行的。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RadioButtonList Enab
- 下一篇: bat批处理教程 24