日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android的helloworld工程目录学习

發布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android的helloworld工程目录学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android的helloworld工程目錄學習

?

Android工程的主要目錄有src、gen、Android X.X、bin、res等文件夾。

?

1.?????Src文件夾

?

Src文件夾包含java源文件(.java),如下圖:


圖1

創建工程時,默認創建Activity對應的源代碼文件為MainActivity.java,對應的類為名MainActivity,由上圖可知MainActivity.java導入了很多類。

?

下面MainActivity類的定義:

?

public class MainActivityextends ActionBarActivity { MainActivity(派生類/子類)繼承自ActionBarActivity(父類) @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (savedInstanceState == null) {getSupportFragmentManager().beginTransaction().add(R.id.container, newPlaceholderFragment()).commit();}}

(1)重寫了父類的onCreate方法.

該方法是在Activity創建時被系統調用,是一個Activity生命周期的開始,如下圖:


圖2

?

?

(2)super.onCreate(savedInstanceState)

就是調用父類的onCreate構造函數,savedInstanceState是保存當前Activity的狀態信息。

(3)setContentView(R.layout.activity_main)

此辦法使用\res\layout\activity_main.xml文件定義的界面布局作為用戶界面,此文件內容如下:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

???xmlns:tools="http://schemas.android.com/tools"

???android:id="@+id/container"//該組件的唯一標示符為container

???android:layout_width="match_parent"

???android:layout_height="match_parent"

???tools:context="com.example.helloworld.MainActivity"

tools:ignore="MergeRootFrame"/>

?

(4)Bundle savedInstanceState

從字面上看savedInstanceState,是保存實例狀態的。實際上,savedInstanceState也就是保存Activity的狀態的。那么,savedInstanceState中的狀態數據是從何處而來的呢?下面我們介紹Activity的另一個方法saveInstanceState。

??? onsaveInstanceState方法是用來保存Activity的狀態的。當一個Activity在生命周期結束前,會調用該方法保存狀態。這個方法有一個參數名稱與onCreate方法參數名稱相同。如下所示:

public void onSaveInstanceState(BundlesavedInstanceState){

super.onSaveInstanceState(savedInsanceState);

}

??? 在實際應用中,當一個Activity結束前,如果需要保存狀態,就在onsaveInstanceState中,將狀態數據以key-value的形式放入到savedInstanceState中。這樣,當一個Activity被創建時,就能從onCreate的參數savedInsanceState中獲得狀態數據。

??? 狀態這個參數在實現應用中有很大的用途,比如:一個游戲在退出前,保存一下當前游戲運行的狀態,當下次開啟時能接著上次的繼續玩下去。再比如:電子書程序,當一本小說被閱讀到第199頁后退出了(不管是內存不足還是用戶自動關閉程序),當下次打開時,讀者可能已忘記了上次已閱讀到第幾頁了,但是,讀者想接著上次的讀下去。如果采用saveInstallState參數,就很容易解決上述問題。

?

?

(5)添加一個fragment到FrameLayout中。

getSupportFragmentManager().beginTransaction()

??????????????????? .add(R.id.container, newPlaceholderFragment())

??????????????????? .commit()

把new PlaceholderFragment()這個fragment添加到R.id.container這個FrameLayout中。

?

Activity中使用getSupportFragmentManager()獲取FragmentManager,之后調用beginTransaction去創建一個FragmentTransaction對象, 再調用add()方法即可添加一個fragment。 在activity中可以使用同一個FragmentTransaction對象去執行多個fragment事務,當做這樣操作時,必須調用commint()方法。

?

@Overridepublic boolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}(1) getMenuInflater().inflate(R.menu.main, menu) getMenuInflater()的函數用來返回Activity的MenuInflater,并通過MenuInflater對象來設置menu XML里的menu作為該Activity的菜單@Overridepublic boolean onOptionsItemSelected(MenuItemitem) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item); }/*** A placeholder fragment containing asimple view.*/public static class PlaceholderFragment extends Fragment {public PlaceholderFragment() {}@Overridepublic ViewonCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rootView =inflater.inflate(R.layout.fragment_main, container, false);return rootView;}}}

2.?????gen文件夾

?

圖3

由上圖可知BuildConfig.java和R.java都是自動生成的,不能修改,BuildConfig.java是調試(Debug)時用的,一般不管,而且R.java是由AAPK工具生成的,但我發現采用V22.3.0的ADT新建HelloWorld工程的R.java內容較少,但V22.6.2版本的就非常多和全面。

?

下面以一個簡單的R.java文件來學習

public final classR {

??? public static final class attr {

??? }

??? public static final class drawable {

??????? public static final intic_launcher=0x7f020057;

??? }

??? public static final class layout {

public static final intactivity_main=0x7f030018;

??????? public static final intfragment_main=0x7f030019;

??? }

??? public static final class string {

??????? public static final intapp_name=0x7f040001;

??????? public static final inthello=0x7f040000;

??? }

}

?

這里的R應該就是resource的簡稱,這個R.java文件中有attr、drawable、layout和string等四個靜態內部類,每個靜態內部類分別對應著一種資源,比如layout靜態內部類對應res\layout文件夾下的activity_main.xml和fragment_main.xml文件,先來看我們創建工程時的圖:


圖4

再來看activity_main.xml文件的內容:

<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"

???xmlns:tools="http://schemas.android.com/tools"

??? android:id="@+id/container"

???android:layout_width="match_parent"

??? android:layout_height="match_parent"

???tools:context="com.example.helloworld.MainActivity"

tools:ignore="MergeRootFrame" />

接著看fragment_main.xml文件的內容:

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

???xmlns:tools="http://schemas.android.com/tools"

???android:layout_width="match_parent"

???android:layout_height="match_parent"

???android:paddingBottom="@dimen/activity_vertical_margin"

???android:paddingLeft="@dimen/activity_horizontal_margin"

???android:paddingRight="@dimen/activity_horizontal_margin"

???android:paddingTop="@dimen/activity_vertical_margin"

???tools:context="com.example.helloworld.MainActivity$PlaceholderFragment">

?

??? <TextView

???????android:layout_width="wrap_content"

???????android:layout_height="wrap_content"

?????? ?android:text="@string/hello_world"/>

?

</RelativeLayout>

可見activity_main是Activity的容器,而fragment_main定義的相對布局是放在此容器中。

?

?? 由于目前【drawable-*dpi】目錄下都只有ic_launcher.png一個圖片文件,因此此時不同詳述的同名的ic_launcher.png文件在drawable內部類總只有一個icon屬性。如果我們在【drawable-*dpi】目錄下再添加一幅圖片,則內部類中會自動的添加一個icon屬性。

PS:添加資源的命名規則:資源文件只能以小寫字母和下劃線做首字母,隨后的名字中只能出現 [a-z0-9_.] 這些字符,否則R.java文件不會自動更新,并且eclipse會提示錯誤。

??? 理解了R.java文件中內容的來源,即當開發者在res/目錄中任何一個子目錄中添加相應類型的文件之后,ADT會在R.java文件中相應的匿名內部類中國自動生成一條靜態int類型的常量,對添加的文件進行索引。如果在layout目錄下再添加一個新的界面,那么在public static final class layout中也會添加相應的靜態int常量。相反當我們在res目錄下刪除任何一個文件,其在R.java中對應的記錄會被ADT自動刪除。

??? R.java文件按除了有自動標示資源的索引功能之外,還有另外一個主要的功能,如果res目錄中的某個資源在應用中沒有被使用到,在該應用被編譯的時候系統就不會把對應的資源編譯到該應用的APK包中,這樣可以節省Android手機的資源。

?

3.?????Android4.4.2

?

圖5

可知此Android 4.4.2 文件夾下包含android.jar文件,這是一個Java 歸檔文件,其中包含構建應用程序所需的所有的Android SDK 庫(如Views、Controls)和APIs。通過android.jar將自己的應用程序綁定到Android SDK和Android Emulator,這允許你使用所有Android的庫和包,且使你的應用程序在適當的環境中調試。例如上面的MainActivity.java源文件中(見圖1) 的:

importandroid.os.Bundle;

importandroid.view.LayoutInflater;

importandroid.view.Menu;

這就是從android.jar導入包。

?

4.?????androidprivate libraries和android dependencies文件夾


圖6

從ADT16開始,Android項目中多了一個名為“Android Dependencies”的庫應用文件夾,這是ADT的第三方庫新的引用方式。

?

當你需要引用第三方庫時,只需在項目中新建一個名為"libs"的文件夾,然后將所有第三方包拷貝到該目錄下。當eclipse啟動時,ADT就會自動幫你完成庫的引用,而不需要像以前一樣自己Build Path,也不再需要Referenced Libraries了。

?

ADT 22中新增了Export,你會發現新增了Android Private Libraries庫,所有的第三方JAR包引入都被放入了Android Private Libraries

?

ADT21的時候,庫工程生成的jar和主工程的第三方jar都都歸納為Android Dependencies,而ADT22是自動將JAR分成Android Private Libraries和Android Dependencies兩類,ADT21不需要勾選Export就能自動將所有引用的JAR包導出并打包到APK,而ADT22則給開發人員選擇權限,讓開發人員自己決定哪些包要導出到APK里。

?

圖7

?

5.?????assets文件夾

包含應用系統需要使用到的諸如mp3、視頻類的文件,但HelloWorld工程下的assets是空文件夾

?

6.?????bin文件夾

二進制文件,編譯過后的文件,運行應用之后才在\bin\dexedLibs文件夾下生成可執行文件。

?

7.?????libs文件夾

第三方的jar文件,比如android-support-v4.jar,即引用第三方的代碼。

?

8.?????res文件夾


圖8

?

資源目錄,包含你項目中的資源文件并將編譯進應用程序。向此目錄添加資源時,會被R.java自動記錄。新建一個項目,res目錄下會有四個子目錄:drawabel、layout、menuvalues。

?

drawabel-xdpi:包含一些你的應用程序可以用的圖標文件(*.png、*.jpg)

layout:界面布局文件(.xml)與WEB應用中的HTML類同,其中fragment_main.xml文件的內容見上面的描述。

Menu:是菜單的內容。

values:軟件上所需要顯示的各種文字。可以存放多個*.xml文件,還可以存放不同類型的數據。比如dimens.xml、strings.xml、styles.xml。

?

9.?????AndroidManifest.xml文件

項目的總配置文件,記錄應用中所使用的各種組件。這個文件列出了應用程序所提供的功能,在這個文件中,你可以指定應用程序使用到的服務(如電話服務、互聯網 服務、短信服務、GPS服務等等)。另外當你新添加一個Activity的時候,也需要在這個文件中進行相應配置,只有配置好后,才能調用此 Activity。AndroidManifest.xml將包含如下設置:application permissions、Activities、intent filters等。

?

AndroidManifest.xml的內容如下:

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

<manifestxmlns:android="http://schemas.android.com/apk/res/android"

??? package="com.example.helloworld"

??? android:versionCode="1"

??? android:versionName="1.0" >

?

??? <uses-sdk

??????? android:minSdkVersion="9"

??????? android:targetSdkVersion="19"/>

?

??? <application

??????? android:allowBackup="true"

???????android:icon="@drawable/ic_launcher"

???????android:label="@string/app_name"

???????android:theme="@style/AppTheme" >

??????? <activity

???????????android:name="com.example.helloworld.MainActivity"

???????????android:label="@string/app_name" >

??????????? <intent-filter>

??????????????? <actionandroid:name="android.intent.action.MAIN" />

?

??????????????? <categoryandroid:name="android.intent.category.LAUNCHER" />

??????????? </intent-filter>

???? ???</activity>

??? </application>

?

</manifest>

?

后面再來詳細學習這個文件。

?

參考鏈接:

Android工程的目錄結構詳解

http://mobile.51cto.com/abased-377325.htm

?

Android項目目錄結構

http://www.cnblogs.com/flish/archive/2010/06/18/1759947.html

?

總結

以上是生活随笔為你收集整理的android的helloworld工程目录学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。