編輯:關於android開發
1.3 創建你的第一個Android項目
1.3.1 創建HelloWorld項目
1、Application Name代表應用名稱,手機上顯示的就是它;
2、Project Name代表項目名稱,其顯示在Eclipse中;
3、Minimum Required SDK是指程序最低兼容版本,Compile With是指程序編譯版本;
1.3.3 分析你的第一個Android程序
1、src 是放置我們所有Java代碼的地方;
2、gen這個目錄裡的內容是自動生成的,主要有一個R.java文件,你在項目中添加的任何資源都會在這裡生成一個相應的資源id。這個文件永遠不要手動去修改它;
3、assets這個目錄用的不多,主要存放一些隨程序打包的文件,在你的程序運行的時候可以動態的讀取到這些文件的內容。並且,如果你的程序中使用到了WebView加載本地網頁的功能,所有網頁相關的文件也都存放在這個目錄下;’
4、bin這個目錄主要包含一些在編譯時自動生成的文件。其中,安裝包就在這個文件中;
5、libs目錄,如果你的項目中有使用到第三方Jar包,就需要把這些Jar包都放在libs目錄下,放在這個目錄下的Jar包都會被自動添加到構建路徑中去;
6、res目錄,簡單點說,你在項目中使用到的所有圖片,布局,字符串等資源都是放在這個目錄下的,前面提到的R.java中的內容也是根據這個目錄下的文件自動生成的;
7、AndroidManifest,xml這是你整個Android項目的配置文件,你在程序中定義的所有四大組件都需要在這個文件裡注冊。另外還可以在這個文件中給應用程序添加權限聲明,也可以重新制定你創建項目時指定的程序最低兼容版本和目標版本。’
8、project.properties這個文件就是通過一行代碼指定了編譯程序時所使用的SDK版本。我們這個HelloWorld項目使用的是API 14,你也可以在這裡改成其他版本試一試;
9、接下來我們來分析HelloWorld項目時如何運行起來的,打開AndroidManifest,xml這個文件,找出這個代碼:
<activity
android:name="com.example.helloworld.HelloWorldActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> //這兩行代碼表示HelloWorldActivity是這個項目的主活動,具體什麼意思以後再說
</intent-filter>
</activity>
說明:這個代碼表示對HelloWorld這個活動進行注冊,沒有在AndroidManifest.xml裡注冊的活動是不能使用的。
10、在介紹Android四大組件的時候說過,活動是Android應用程序的門面,凡是在應用程序中你看到的東西,都是放在活動中的。所以,當我們打開程序的時候,你看到的東西實際上就是HelloWorldActivity這個活動。以下是這個活動的代碼:
package com.example.helloworld;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class HelloWorldActivity extends Activity { //表示HelloWorldActivity繼承自Activity。Activity是Android系統提供的一個活動基 類,我們項目中所有的活動都必須要繼承它才能擁有活動的特性。
@Override
protected void onCreate(Bundle savedInstanceState) { //onCreate()方法是一個活動被創建時必定要執行的方法
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_world); //此處調用的setContentView()方法,就是這個方法給當前的活動引入了一個布局
}
@Override
public boolean onCreateOptionsMenu(Menu menu) { //創建菜單,詳細後期補充
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.hello_world, menu);
return true;
}
}
看完這個代碼發現裡面並沒有HelloWorld字樣,那在活動中也就是在程序界面中顯示的HelloWorld!是在哪裡定義的呢?
其實Android程序設計講究邏輯和視圖分離,因此是不推薦在活動中直接編寫界面的,更加通用的一種做法是,在布局文件中編寫界面,然後在活動中引入進來。那也就是說HelloWorld 定義在hello_world_layout.xml這個文件中咯?下面我們打開這個文件,代碼如下:
<RelativeLayout xmlns: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=".HelloWorldActivity" >
//上面看不懂沒關系,我們來看一看下面的代碼
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
其中TextView是Android系統提供的一個控件,用於在布局中顯示文字的。在這個代碼中我們發現了HelloWorld字樣,但是這個真是在這裡定義的嗎?其實這裡也不是。真正的HelloWorld!字符串也不是在這裡定義的。Android不推薦在程序中對字符串進行硬編碼,更好的做法是把字符串定義在res/values/string.xml裡,然後在布局文件或者代碼中引用。下面是strings.xml代碼:
<resources>
<string name="app_name">Hello World</string> //修改APP名稱
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string> //采用鍵值對的形式,HelloWorld!值對應了一個叫做hello_world的鍵。在 hello_world_layout.xml布局中就是通過引用了hello_world這個鍵,才找到相應的值
</resources>
1.3.4 詳解項目中的資源
1、res目錄:所有以drawable開頭的文件夾都是用來放圖片的,所有以values開頭的文件夾都是用來放字符串的,layout文件夾是用來放布局文件的,menu文件夾是用來放菜單文件的。
2、如何使用這些資源?
比如剛剛說到的strings.xml中找到Hello world !字符串,我們有兩種方式可以引用它:
(1)在代碼中通過R.string.hello_world 可以獲得該字符串的引用;
(2)在XML中通過@string/hello_world可以獲得該字符串的引用;
基本的語法就是以上兩點,其中string部分是可以替換的,如果是引用的圖片資源就可以替換成drawable,如果引用的是布局就可以替換成layout,以此類推。
另外,HelloWorld項目的圖標就在AndroidManifest.xml中通過android:icon = "@drawable/ic_launcher"來指定的,而ic_launcher這張圖片就在drawable文件夾下,如果想修改項目的圖標就在這裡改。
1.4 掌握日志日志工具的使用
1.4.2 使用Android的日志工具
1、Log.v() 對應級別 verbose,用於打印那些最為瑣碎的,意義最小的日志信息。是Android日志裡面級別最低的一種。
2、Log.d() 用於打印一些調試信息,這些信息對你調試程序和分析問題應該是有幫助的。對應級別debug。
3、Log.i() 這個方法用於打印一些比較重要的數據,這些數據應該是你非常想看到的,可以幫助你分析用戶行為的那種。對應級別info。
4、Log.w() 這個方法用於打印一些警告信息,提示程序在這個地方可能會有潛在風險,最好去修復一下出現警告的地方,對應級別warn。
5、Log.e() 這個方法用於打印程序中的錯誤信息。對應級別error。
1.4.3 日志工具怎麼使用
public class HelloWorldActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_world);
Log.d("HelloWorldActivity","onCreate execute"); //Log.d中傳入兩個參數,第一個慘數是tag,一般傳入當前的類名,主要用於對打印信息進行過濾。第二個參數是msg,即想要打印的具體內容。
}
百度地圖定位簽到功能,百度地圖簽到 1. 注意 key 一定要在activity 前面 <application android:allowBackup=tr
Android:支持多選的本地相冊 前段時間在做一個動態發布功能,需要用到圖片上傳。一開始直接調用的系統相冊和相機,由於系統相機不支持多選,就花點時間做了個本地相冊,
ILJMALL project過程中遇到Fragment嵌套問題:IllegalArgumentException: Binary XML file line #23:
47.Android 自定義PopupWindow技巧 47.Android 自定義PopupWindow技巧 Android 自定義PopupWindow技巧 前言 P