day01 英語(yǔ)****
Generation 一代人;代(約30年),時(shí)代
icon 圖標(biāo)
Libraries:c代碼庫(kù)
? OpenGL:圖形快速顯示,游戲開(kāi)發(fā)
? webkit:瀏覽器內(nèi)核
? Android Runtime
? Dalvik VM:虛擬機(jī),android代碼運(yùn)行在此虛擬機(jī)
? 運(yùn)行時(shí)調(diào)用Libraries C代碼庫(kù)
? Application Framework中間介,java代碼,調(diào)用底層c代碼
n.構(gòu)架;框架;(體系的)結(jié)構(gòu);機(jī)構(gòu),組織
? Applications原生的應(yīng)用程序:瀏覽器、桌面、聯(lián)系人等
?eclipse就是存放編譯器的目錄。
?sdk為Android提供的軟件開(kāi)發(fā)工具包,
?SDK Manager.exe就是sdk管理工具,下面會(huì)介紹。
sdk目錄為:
異常cause by 事件方法無(wú)參數(shù)。 方法私有啦
andorid eclipse 路徑的配置
JAVA_HOME D:\software\jdk1.8.0_25
path %JAVA_HOME%/bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
今天的知識(shí)
一。安卓發(fā)展史
3G
4G 4th -Generation ,速度可達(dá)到100Mbps以上,可以在線觀看高清視頻,上傳下載大批量數(shù)據(jù)。4g: lte , long time evolution
5G 5th - Generation, 速度可達(dá)到1Gbps以上,幾乎滿足人們的所有需求。
二。android的版本
2.3 具有NFC 近場(chǎng)通信技術(shù)
3.0 具平板設(shè)計(jì)
三。Android 操作系統(tǒng)架構(gòu) (重點(diǎn))
Android架構(gòu)
application 運(yùn)用層 (java開(kāi)發(fā))
瀏覽器、桌面、聯(lián)系人
application framework 運(yùn)用框架層 (java開(kāi)發(fā)+JNI)
(JNI java native interface 呈上其下 )
Libraties 函數(shù)庫(kù) (c/c++開(kāi)發(fā)) 和 Android Runtime 虛擬器層
OpenGL:圖形快速顯示,游戲開(kāi)發(fā) Dalvik VM:虛擬機(jī),android代碼運(yùn)行
webkit:瀏覽器內(nèi)核
Linux Kernel : linux 硬件內(nèi)核驅(qū)動(dòng)層 (c開(kāi)發(fā) )
用于安全管理、內(nèi)存管理、進(jìn)程管理、電源管理、硬件驅(qū)動(dòng)
四。兩種虛擬機(jī)的不同
1.基于的架構(gòu)不同: jvm 基于棧(位于內(nèi)存的一個(gè)空間,執(zhí)行指令需要尋找cpu的地址 )
DVM 基于寄存器(CPU的一個(gè)組成部分,不需尋找Cpu地址,直接運(yùn)行執(zhí)行)
2.執(zhí)行的文件的格式不同: JVM 一次執(zhí)行多個(gè).class文件,運(yùn)行慢
DVM 一次運(yùn)行 將多個(gè).class文件編成一個(gè).dex文件 執(zhí)行 ,運(yùn)行快
五。 ART 與 DVM
ART 不需轉(zhuǎn)換代碼,直接預(yù)編譯成機(jī)器碼,效率高
優(yōu)點(diǎn):程序無(wú)需轉(zhuǎn)換, 運(yùn)行速度塊,
缺點(diǎn): 占用內(nèi)存大,
DVM 運(yùn)行慢 卡頓
六;Android 開(kāi)發(fā)環(huán)境的搭建
1.匹配 Android JDK 要匹配位數(shù) 32 64
2.
3. adt-bubdle : android develpement tools bubdle 安卓開(kāi)發(fā)工具集
eclipse
sdk
SDK Manager 在此翻墻下載一些新的API文檔
4. plamform的 apilevel 19 4.4版本
18 4.3
11 3.0
10 2.3
8 2.2
5 plamform-tools
aapt.exe android application package tool 安卓運(yùn)用包工具
adb.exe 建立電腦與手機(jī)之間的鏈接
dx.bat 講多個(gè).class文件打包成一個(gè).dex文件
七, SDK下的目錄
add-ons 預(yù)留的一個(gè)附加目錄
build-tools 構(gòu)建工具目錄
docs SDKAPI參考文檔,所有的API都可以在這里查到。
extras 開(kāi)發(fā)中額外提供的一些工具及jar
platforms 不同版本android的核心jar包
platforms-tools 平臺(tái)一些相關(guān)的工具
soursce 原碼
system-images:系統(tǒng)鏡像文件
tools:開(kāi)發(fā)中使用的一些工具,如9path,做圖片拉伸適配
八:Android Manager 介紹
九:模擬器的簡(jiǎn)介及創(chuàng)建
Device 常用的分辨率
3.2----- QVGA ------320480
3.7=====WVGA=========480800
4.7------WXGA-------1280*720
十 DDMS
dalvik debug manager system:delvik調(diào)試管理系統(tǒng)
|--Devices 顯示當(dāng)前電腦所連接的所有android設(shè)備
顯示 android設(shè)備運(yùn)行的進(jìn)程
|--Debug小蜘蛛 用來(lái)調(diào)試程序用的
|--Start Method Profiling 開(kāi)始方法的分析 分析某個(gè)操作,某個(gè)方法的性能
|--Stop Process 停止進(jìn)程,可以結(jié)束一個(gè)應(yīng)用進(jìn)程,殺死應(yīng)用,清理緩存。
|--Screen Capture 屏幕捕獲,可以給連接上的設(shè)備截屏。-
File Explorer:文件系統(tǒng) 列出當(dāng)前設(shè)備所有目錄。
dataapp: 自己安裝的應(yīng)用程序apk文件存放的目錄,
|-- data-data:應(yīng)用的私有目錄,系統(tǒng)每安裝一個(gè)新的應(yīng)用程序,都會(huì)在此目錄創(chuàng)建該應(yīng)用包名的文件,用來(lái)存放該應(yīng)用的私有數(shù)據(jù),當(dāng)應(yīng)用卸載時(shí),該包名的文件夾也會(huì)被刪除。
|--mnt-sdcard:SD卡目錄
|--system-->app:系統(tǒng)應(yīng)用程序apk文件存放的目錄
十一:
部署運(yùn)行的三種方式:- 右擊工程 run as
- 工具欄的按鈕
- 快捷鍵:ctrl+F11
dalvik debug manitor service
十二: android工程目錄結(jié)構(gòu)
src 源代碼
gen 自動(dòng)申城的文件目錄,不能修改
|----Builder
|---R.java 里面有很多的內(nèi)部類 是對(duì)資源文件的一個(gè)索引
Android4.3
|-- android.jar 屬性可修改版本等級(jí) (只要一個(gè))
Android Dependencie 第三方j(luò)ar包
assets 資產(chǎn)目錄 用來(lái)存放程序運(yùn)行過(guò)程中需要的一些工具
bin
|--dexeLibs
|--res
|---res
drawable-hdpi 存放圖片資源
layout 布局資源
menu 菜單資源
activity_main.xml
|--values
dimens.xml 封裝長(zhǎng)度
String.xml 封裝字符串
type.xml 封裝樣式
|--values-zh value還可國(guó)際化 自建 國(guó)際化資源 中國(guó)的
|--values-en 美國(guó)的
AndroidMainfest.xml 清單文件
程序的入口,action:main 主要的 category Lancher 啟動(dòng) 發(fā)射
包名
圖片圖標(biāo)
版本名
運(yùn)用名
package 包名 唯一標(biāo)示
versionCode
minsdkVersion 運(yùn)用程序安裝的最低版本
引用一張圖片 @文件夾/圖片
@draw
圖片命名規(guī)則: 不能字母大寫,中文命名, 數(shù)字開(kāi)頭
activity.java
oncreate 是activity啟動(dòng)時(shí)調(diào)用,
activty 可還以配置運(yùn)用程序的使用 權(quán)限
<uses-permission android:name="android.permission.CALL_PHONE"/>
十三:android 打包過(guò)程
.java
------jdk------->.class
-----dx.bat------>一個(gè).dex 聯(lián)合 res assets androidmanifest.xml
-----aapt------>.apk
---簽名認(rèn)證jarsigner---- ->final.apk 上市
任何一個(gè)apk都需要簽證才能上市,
十四:adb命令行操作
android debug bridge 調(diào)式橋 建立手機(jī)與電腦直接的連接 adb運(yùn)行的端口號(hào)是5037
1.環(huán)境變量的配置:path C:\kaifa\adt-bundle-windows-x86_64_20140101\sdk\platform-tools
2.指令
adb devices 列出當(dāng)前電腦連接的android設(shè)備桌面
adb pull phone_paht pc_path : 將手機(jī)端(設(shè)備)文件 拉到 電腦里 // pull 拉 托
adb push pc_path phone_path 將電腦文件 倒到手機(jī)里
adb install [-r] apkpath 電腦的文件(記事本) 安裝到手機(jī)上 -r 強(qiáng)制安裝
adb install -r C:\user]Administrator\Desktop\com.HonestNotebook.apk
adb uninstall packagename; 從手機(jī)卸載一個(gè)應(yīng)用程序
DOS adb uninstall C:\user]Administrator\Desktop\com.HonestNotebook.apk
adb kill-server 關(guān)閉調(diào)式橋
adb start-server 開(kāi)啟調(diào)式橋
adb端口號(hào)占用的問(wèn)題
netstat -oan 查看 adb的端口號(hào) 被那個(gè)進(jìn)程占用啦
在啟動(dòng)任務(wù)管理器里找到該進(jìn)程,把其關(guān)掉,然后重啟cmd就行啦
adb shell 進(jìn)入當(dāng)前設(shè)備linux環(huán)境下
案列
--> adb shell
進(jìn)入私有文件目錄
--> root@android:/ # cd data/data/com.itheima.filePermission
+ls -l 查看當(dāng)前設(shè)備的目錄結(jié)構(gòu)
-->root@android:/data/data/com.itheima.filePermission # ls -l
drwxrwx--x u0_a48 u0_a48 2015-08-31 02:04 cache
drwxrwx--x u0_a48 u0_a48 2015-08-31 02:04 files
drwxr-xr-x system system 2015-08-31 02:04 lib
進(jìn)入文件 files的目錄
----> root@android:/data/data/com.itheima.filePermission # cd files
進(jìn)入文件 files的目錄結(jié)構(gòu)
--->root@android:/data/data/com.itheima.filePermission/files # ls -l
-rw-rw---- u0_a48 u0_a48 18 2015-08-31 02:04 append.txt
-rw-rw---- u0_a48 u0_a48 18 2015-08-31 02:04 private.txt
-rw-rw-r-- u0_a48 u0_a48 18 2015-08-31 02:04 read.txt
-rw-rw--w- u0_a48 u0_a48 18 2015-08-31 02:04 write.txt
使用 linux的指令 chmod 更改私有文件的權(quán)限
輸入 # chmod 要成為的權(quán)限(十進(jìn)制) 修改的私有文件
---> # chmod 764 append.txt
---> # ls -l
-rwxrw-r-- u0_a48 u0_a48 18 2015-08-31 02:04 append.txt (權(quán)限發(fā)生了改變-rw-rw----為-rwxrw-r--)
-rw-rw---- u0_a48 u0_a48 18 2015-08-31 02:04 private.txt
-rw-rw-r-- u0_a48 u0_a48 18 2015-08-31 02:04 read.txt
-rw-rw--w- u0_a48 u0_a48 18 2015-08-31 02:04 write.txt
adb shell +ls -l 查看當(dāng)前設(shè)備的目錄結(jié)構(gòu)
adb shell+logcat 查看系統(tǒng)運(yùn)行中的日志信息(錯(cuò)誤信息)
注意 如果當(dāng)前電腦連接多態(tài)android設(shè)備,需要指定操作的當(dāng)前是那臺(tái)android設(shè)備。
要在 adb后加 -s 設(shè)備序列號(hào)
十五.案列:電話撥號(hào)器(重點(diǎn))
1.需求分析文檔,設(shè)計(jì)UI原型圖
2.UI工程師 設(shè)計(jì)UI界面
3.架構(gòu)師 寫架構(gòu),寫接口文檔
4.碼農(nóng) 客戶端
A寫布局界面
1.res/layout/activity_main.xml 布局控件代碼 搭建界面需要控件有:TextView控件(請(qǐng)輸入電話號(hào)碼)、EditText控件(xxx號(hào)碼)、Button(呼叫此號(hào)碼)
?
B 寫業(yè)務(wù)邏輯 MainActivity.java
1. 通過(guò)布局文件中對(duì)控件配置的id,在activity中獲取控件的對(duì)象
findViewById(int id)
2. 為按鈕設(shè)置點(diǎn)擊事件,當(dāng)點(diǎn)擊Button時(shí)發(fā)生事件 獲取EditText中文本內(nèi)容,號(hào)碼
bt_callphone.setOnClickListener( new OnClickListener(){public void onClick(View v){syso(....);}}
3.在點(diǎn)擊事件的onclick方法中,獲取用戶輸入的電話號(hào)碼
//獲取EditText extends TextView 對(duì)象的文本內(nèi)容
String strNumber=et_number.getText().toString().trim();
4.創(chuàng)建一個(gè)意圖Intent對(duì)象 向 電話撥號(hào)器發(fā)送意圖撥打電話
Intent intent = new Intent();
5..為Intent對(duì)象設(shè)置一個(gè)打電話的動(dòng)作
intent.setAciton(Intent.ACTION_CALL);
6.為Intent對(duì)象設(shè)置一個(gè)數(shù)據(jù),告訴意圖對(duì)象具體做什么事
intent.setData(Uri.parse("tel:"+strNumber));
7.啟動(dòng)Intent對(duì)象,執(zhí)行以上動(dòng)作
startActivity(intent);
8.在androidmanifest.xml中設(shè)置一個(gè)打電話的權(quán)限
<uses-permission android:name="android.permission.CALL_PHONE"/>
5.測(cè)試工程師 測(cè)試運(yùn)用
十六.按鈕的四種點(diǎn)擊事件 crl+shift+g 看事件是否引控件用
方法一:使用匿名內(nèi)部類實(shí)現(xiàn)點(diǎn)擊事件,但對(duì)于多個(gè)按鈕的點(diǎn)擊事件比較臃腫
btn_call.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
EditText et_number = (EditText)
findViewById(R.id.et_number);
String number = et_number.getText().toString().trim();
// 獲取文本框的內(nèi)容
if ("".equals(number)) {
// context 上下文 duration 顯示土司的時(shí)長(zhǎng)
//這里不用MainActivity.this, 要用 mcontext // private Context mcontext // mcontext=this
Toast.makeText(mcontext, "號(hào)碼不能為空", Toast.LENGTH_LONG).show();
return;
}
Intent intent = new Intent(); // 創(chuàng)建意圖對(duì)象
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
});
方法二:內(nèi)部類來(lái)實(shí)現(xiàn) 定義一個(gè)內(nèi)部類MyButtonListener 實(shí)現(xiàn)接口OnClickListener,重寫OnClick(View v)方法
private class MyButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
EditText et_number = (EditText)
findViewById(R.id.et_number);
String number =
et_number.getText().toString().trim();
// 獲取文本框的內(nèi)容
if ("".equals(number)) {
Toast.makeText(mcontext, "號(hào)碼不能為空", Toast.LENGTH_LONG).show();
return;
}
System.out.println("number--" + number);
Intent intent = new Intent();
// 創(chuàng)建意圖對(duì)象
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
}
//方法三 使用switch選擇語(yǔ)句 實(shí)現(xiàn)N多個(gè)按鈕的點(diǎn)擊事件 ,這種方法最優(yōu),開(kāi)發(fā)經(jīng)常用
//但是MainActivity要實(shí)現(xiàn)OnClickListener接口 ,重寫Click(View v)方法
public class MainActivity extends Activity implements OnClickListener {
private Button bt_01;
private Button bt_02;
private Button bt_03;
private Context mcontext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mcontext=this;
使用switch選擇語(yǔ)句 實(shí)現(xiàn)N多個(gè)按鈕的點(diǎn)擊事件
//但是MainActivity要實(shí)現(xiàn)OnClickListener接口 ,重寫Click(View v)方法
bt_01.setOnClickListener(this);
bt_02.setOnClickListener(this);
bt_03.setOnClickListener(this);
}
private void callphone() {
//3.獲取用戶輸入的電話號(hào)碼
String number = bt_01.getText().toString().trim();//通過(guò)EditText獲取該控件上顯示的文本內(nèi)容
//4.撥打電話號(hào)碼
Intent intent = new Intent();//創(chuàng)建一個(gè)意圖對(duì)象; 奴隸,打電話
intent.setAction(Intent.ACTION_CALL);//設(shè)置意圖對(duì)象的動(dòng)作,打電話
intent.setData(Uri.parse("tel:"+number));// 設(shè)置意圖對(duì)象的數(shù)據(jù),告訴奴隸撥打的電話號(hào)碼
startActivity(intent);//去啟動(dòng)一個(gè)意圖對(duì)象
}
對(duì)象 View v 有一個(gè)方法getId() 獲取當(dāng)前被點(diǎn)擊的控件對(duì)象的id
@Override
public void onClick(View v) {
int id = v.getId();
switch( id){
case R.id.bt_01: //當(dāng)點(diǎn)擊按鈕1時(shí),調(diào)用 callphone()方法, 執(zhí)行撥打電話功能
callphone();
break;
case R.id.bt_02: //當(dāng)點(diǎn)擊按鈕2時(shí),顯示按鈕02被點(diǎn)擊啦
Toast.makeText(mcontext, "按鈕02被點(diǎn)擊啦", Toast.LENGTH_SHORT).show();
break;
case R.id.bt_03://當(dāng)點(diǎn)擊按鈕3時(shí),顯示按鈕03被點(diǎn)擊啦
Toast.makeText(mcontext, "按鈕03被點(diǎn)擊啦", Toast.LENGTH_SHORT).show();
break;}}
}
1.使用匿名內(nèi)部類的方式,
bt_callphone.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
String strNumber=et_number.getText().toString().trim();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+strNumber));
startActivity(intent); } });
2. 創(chuàng)建一個(gè)子類MyonclickListener實(shí)現(xiàn)接口onclickListener, 重寫onclick()方法, 設(shè)置控件點(diǎn)擊事件時(shí)傳一個(gè)類的對(duì)象。
private class MyButtonListener implements OnClickListener {
// 當(dāng)按鈕被點(diǎn)擊的時(shí)候調(diào)用
@Override
public void onClick(View v) {
// 3. 獲取到 我要撥打的號(hào)碼 首先我要 找到 文本框
EditText et_number = (EditText)
findViewById(R.id.et_number);
String number =
et_number.getText().toString().trim(); // 獲取文本框的內(nèi)容
// 判斷number 如果號(hào)碼為空 我彈出一個(gè)提示 土司 Toast
if ("".equals(number)) {
// context 上下文 duration 顯示土司的時(shí)長(zhǎng)
Toast.makeText(MainActivity.this, "號(hào)碼不能為空",
Toast.LENGTH_LONG).show();
return;
}
System.out.println("number--" + number);
// 4 撥打此號(hào)碼 意圖 干 一件事的想法 打 狗 貓 打代碼 打電話
Intent
Intent intent = new Intent(); // 創(chuàng)建意圖對(duì)象
// 設(shè)置要撥打的動(dòng)作
intent.setAction(Intent.ACTION_CALL);
// 設(shè)置撥打電話號(hào)碼的數(shù)據(jù) uri統(tǒng)一資源標(biāo)示符 范圍要比
url定義范圍要廣定義的語(yǔ)法規(guī)則 比較 url
// http://www.baidu.com 統(tǒng)一資源定位符
intent.setData(Uri.parse("tel:" + number));
// 真正的撥打號(hào)碼 開(kāi)啟意圖對(duì)象
startActivity(intent);
}
3. 讓當(dāng)前類MainActivty實(shí)現(xiàn)接口onclickListener,設(shè)置控件點(diǎn)擊事件時(shí)傳一個(gè)this。這種方式適合按鈕比較多的情況,一般在公司采用該方式。
4. 在布局文件中為控件添加一個(gè)onclick屬性,在布局對(duì)應(yīng)的Activity中寫一個(gè)一onclick屬性值為名的方法,要public,傳一個(gè)View類型的參數(shù)。比較適合做簡(jiǎn)單的測(cè)試。
十七. 控件布局方式
控件的編號(hào)id android:id="@+id/當(dāng)前控件對(duì)象"
1.LinearLayout(線性布局)
<TextView/> 文本框 顯示框的內(nèi)容
水平線性布局 android:orientation=“horizontal”表示水平方向
、垂直線性布局 android:orientation=“vertical”表示垂直方向
android: gravity=center/left/right gravity:對(duì)齊方式 子控件以當(dāng)前控件為參照物的對(duì)齊方式 (注:與父窗體界面無(wú)關(guān))
android: layout_gravity=center/left/right 當(dāng)前控件以父窗體為參照物的對(duì)齊方式 (父窗體可能指手機(jī)屏幕,也可能指孫控件的父控件窗體)
android:background="#ffffff" 控件的背景顏色
android:layout_margintop/Bottom/Right/Left="50dp" 當(dāng)前控件 與上面/下面/右邊/左邊 控件 的間距
android: padding=10dip 當(dāng)前控件里面的子控件 與 當(dāng)前控件的四周間距
android:paddingTop="20dp" 當(dāng)前控件與上面的控件的間隙
android:paddingBottom="20dp" 當(dāng)前控件與下面的控件的間隙
android: hint 友情提示,引導(dǎo)你做什么
android:layout_width="match/fill_parent" 控件的寬填充父窗體
android:layout_width="wrap_content" 控件的寬被父窗體包裹
android:layout_height="match/fill_parent" 控件的高填充父窗體
android:layout_height="wrap_content" 控件的高被父窗體包裹
RelativeLayout(相對(duì)布局)都是從左上角開(kāi)始布局,要控制位置需要 設(shè)置 每個(gè)控件相對(duì)于其他控件的位置。
都是從左上角開(kāi)始布局,要布局控件的位置就要以其他的控件為參照物
當(dāng)前控件相對(duì)于另一個(gè)控件
layout _below="@id/bt_center" 當(dāng)前控件位于哪個(gè)控件的下方
android:layout_above="@id/bt_center" 當(dāng)前控件位于哪個(gè)控件的上方
android:layout_toLeftOf="@id/bt_center" 當(dāng)前控件位于那個(gè)控件的左邊
android:layout_toRightOf="@id/bt_center" 當(dāng)前控件位于那個(gè)控件的右邊
layout_alignParentright 當(dāng)前控件以父窗體(手機(jī)界面)為參照物的對(duì)其方式
android:layout_centerHorizontal="true":當(dāng)前控件在父窗體中水平居中
android:layout_centerVertical="true":當(dāng)前控件在父窗體中垂直居中
android:layout_centerInParent="true": 當(dāng)前控件位于父窗體的正中間
幀布局 FrameLayout
控件一層一層往上疊加布局
表格布局 TableLayouts
TableRow 此控件代表一行,
TableRow 此控件代表一列
絕對(duì)布局 AbsoluteLayout
-------------------------應(yīng)用列表界面。
Settings設(shè)置-display
*Screentimeout,屏幕超時(shí)。超出設(shè)置時(shí)間,自動(dòng)鎖屏。在4.1中是Sleep選項(xiàng)。
? Package
Name:包名,這個(gè)命名要具有一定意義,比如:com.公司名稱.xxx
? Minimum Required SDK:工程最低要求運(yùn)行版本
? Target SDK:最高可運(yùn)行的版本
? Compile With:編譯的版本,一般用較高的版本
? Theme:主題:none即可
注意這里的工程名是01.HelloWorld,這是下邊的包名Package
Name會(huì)自動(dòng)生成com.example.1.helloworld,包名中不允許出現(xiàn)數(shù)字,所以刪掉
即
Android工程目錄結(jié)構(gòu)
? src:源代碼。如果最初選擇創(chuàng)建Activity,會(huì)有一個(gè)Activity的子類
? gen:系統(tǒng)自動(dòng)生成的文件。R.java 中記錄了項(xiàng)目中各種資源ID
BuildConfig.java 標(biāo)記項(xiàng)目是否可以Debug
? Android 4.4
當(dāng)前工程所使用的SDK類庫(kù)
? Android Private Libraries
用來(lái)支持各個(gè)版本的類庫(kù)
? assets:資源文件
不會(huì)在R文件注冊(cè),原封不動(dòng)發(fā)布
里面可以放置應(yīng)用程序依賴的一些文件
如果此文件夾中存放的文件過(guò)大,在發(fā)布時(shí),上傳apk將會(huì)很慢。
? bin:編譯后的二進(jìn)制文件
包括class、資源文件、dex、apk、清單文件等
? libs:工程中使用的庫(kù)
默認(rèn)帶有版本支持的類庫(kù),像v4、v7包
? res:系統(tǒng)資源,所有文件都會(huì)在R文件生成資源ID
? drawable:圖片
? layout:界面布局
? menu:菜單
? values:字符串、樣式等數(shù)據(jù)
? anim:動(dòng)畫
? raw:原生文件
? drawable-hdpi:高分辨率的圖片目錄
? drawable-ldpi:低分辨率的圖片目錄
? drawable-mdpi:中分辨率的圖片目錄
? drawable-xhdpi:大分辨率的圖片目錄
? drawable-xxhdpi:超大分辨率的圖片目錄
? AndroidManifest.xml:清單文件
Android中的四大組件(Activity、ContentProvider、BroadcastReceiver、
Service)都需要在該文件中注冊(cè)
程序所需的權(quán)限也需要在此文件中聲明,例如:電話、短信、互聯(lián)網(wǎng)、
訪問(wèn)SD卡。
manifest節(jié)點(diǎn):pakeage:是應(yīng)用安裝的路徑data/data的目錄,手機(jī)上的
應(yīng)用程序的不能有一樣的包名/目錄。
? manifest節(jié)點(diǎn):
versionCode:應(yīng)用程序版本號(hào)
versionName:應(yīng)用程序版本名稱
? proguard.cfg:
用來(lái)混淆代碼的配置文件,防止別人反編譯
? project.properties:
標(biāo)記該項(xiàng)目使用SDK版本號(hào),早期版本名為:default.properties
Android程序部署與啟動(dòng)
? 應(yīng)用程序安裝、發(fā)布:Package Explorer中右鍵點(diǎn)擊工程 – Run As –
Android Application,快捷鍵Ctrl+F11
程序啟動(dòng)過(guò)程:
? Eclipse將.java源文件編譯成.class
? dx工具將所有.class文件轉(zhuǎn)換為.dex文件
? 再將.dex文件和所有資源打包成.apk文件
? 將.apk文件上傳并安裝到模擬器,存儲(chǔ)在/data/app目錄下
? 啟動(dòng)程序,開(kāi)啟進(jìn)程
? 根據(jù)AndroidManifest.xml文件找到MainActivity類,創(chuàng)建Activity
? Activity創(chuàng)建后執(zhí)行onCreate(Bundle)方法,根據(jù)R.layout.activity_main構(gòu)建
界面
?
Android程序部署與啟動(dòng)
? 應(yīng)用程序安裝、發(fā)布:Package Explorer中右鍵點(diǎn)擊工程 – Run As –
Android Application,快捷鍵Ctrl+F11
程序啟動(dòng)過(guò)程:
? Eclipse將.java源文件編譯成.class
? dx工具將所有.class文件轉(zhuǎn)換為.dex文件
? 再將.dex文件和所有資源打包成.apk文件
? 將.apk文件上傳并安裝到模擬器,存儲(chǔ)在/data/app目錄下
? 啟動(dòng)程序,開(kāi)啟進(jìn)程
? 根據(jù)AndroidManifest.xml文件找到MainActivity類,創(chuàng)建Activity
? Activity創(chuàng)建后執(zhí)行onCreate(Bundle)方法,根據(jù)R.layout.activity_main構(gòu)建
界面
public class MainActivity extends Activity {
@Override
//oncreate()運(yùn)用程序界面被創(chuàng)建時(shí)調(diào)用此方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設(shè)置運(yùn)用程序的UI界面顯示調(diào)用setContentView()方法
/*R是個(gè)最終類 能自動(dòng)生成 ,不能修改 AUTO-GENERATED FILE. DO NOT MODIFY.
* res 是個(gè)資源文件夾
* R.layout.activity_main 調(diào)用.layout文件夾里的activity_main.xml文件,就會(huì)顯示出虛擬機(jī)界面在eclipse里 */
setContentView(R.layout.activity_main);
}
}
? R.layout.activity_main是R類中的一個(gè)成員變量,指向res/layout/activity_main.xml文件
? activity_main.xml文件中描述了Activity的布局方式以及界面組件
? 解析activity_main.xml,通過(guò)反射創(chuàng)建對(duì)象,生成界面
Android程
各個(gè)關(guān)于
關(guān)于MainActivity.java 文件 ----activitiy 第一次創(chuàng)建的時(shí)候調(diào)用
/02_常見(jiàn)布局/src/cn/itheima/flayout/MainActivity.java
public class MainActivity extends Activity {
@Override
//oncreate()運(yùn)用程序界面被創(chuàng)建時(shí)調(diào)用此方法 //運(yùn)用程序只要一開(kāi)啟就會(huì)調(diào)用oncreate
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設(shè)置運(yùn)用程序的UI界面顯示調(diào)用setContentView()方法
/*R是個(gè)最終類 能自動(dòng)生成 ,不能修改 AUTO-GENERATED FILE. DO NOT MODIFY.
* res 是個(gè)資源文件夾
* R.layout.activity_main 調(diào)用.layout文件夾里的activity_main.xml文件,就會(huì)顯示出虛擬機(jī)界面在eclipse里 */
// 加載 activity 需要顯示布局
setContentView(R.layout.activity_main);
}
}
關(guān)于R.java 文件
/02_常見(jiàn)布局/gen/cn/itheima/flayout/R.java
public final class R
|---- public static final class attr {}
|---- public static final class dimen {
static final int activity_horizontal_margin=0x7f040000;
static final int activity_vertical_margin=0x7f040001; }
|---- static final class drawable {
public static final int ic_launcher=0x7f020000;}
|---- public static final class id {
public static final int action_settings=0x7f080000;}
|---- static final class layout {
static final int activity_main=0x7f030000;}
|---- static final class menu { static final int main=0x7f070000; }
|---- static final class string {
static final int action_settings=0x7f050001;
static final int app_name=0x7f050000;
static final int hello_world=0x7f050002;}
關(guān)于activity_main.xml文件
描述了Activity的布局方式以及界面組件
/02_常見(jiàn)布局/res/layout/activity_main.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:gravity="ceenter_horizontal" // 讓控件在界面水平居中
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=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
//設(shè)置控件的id
<EditText android:id="@+id/et_password" />
<EditText android:id="@+id/et_password"/>
<CheckBox android:id="@+id/cb_remember"/>
關(guān)于 AndroidManifest.xml 文件
/02_常見(jiàn)布局/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itheima.flayout"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="cn.itheima.flayout.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
(4.2前) Dalvik VM 安卓運(yùn)用虛擬機(jī)程序
(4.2后) 新版本 ART 安卓虛擬機(jī)運(yùn)用程序
1.提高程序運(yùn)行效率
2.但是不穩(wěn)定,耗電量大,占用內(nèi)存
2.android開(kāi)發(fā)工具的下載配置
www.andro s 安卓開(kāi)發(fā)工具集
.*下載安卓的ADT的插件 for eclipse
instaling eclispe plugin eclispe插件
*android SDK 開(kāi)發(fā)工具集
eclipse
Android Studio
*下載 adt-bundle-windows-x86-2013-解壓:
有 eclipse
sdk
SDK Managet.exe
* 選 Android 4.1.2(API16)為例 選擇 ARM system-images 選擇模擬器創(chuàng)建需要的鏡像
android SDK Manger開(kāi)發(fā)環(huán)境的目錄結(jié)構(gòu) :下載安裝最新的 sdk程序
sdk 包
build-tools 編譯需要用到的所有工具,把開(kāi)發(fā)的程序裝進(jìn)手機(jī)
docs 開(kāi)發(fā)的離線文檔
extras 額外工具,模擬器加速器,向下兼容的jar包
---android/ support:存儲(chǔ)的是goole開(kāi)發(fā)的新特性jar包
-----intel /...Mannger(硬件加速管理器)/IntelHaxm.exe 提高電腦inter的運(yùn)行速度(i3以后處理器)platforms 開(kāi)發(fā)需要的版本平臺(tái),每個(gè)平臺(tái)的android.jar在對(duì)應(yīng)的文件夾里面
platform-tools 開(kāi)發(fā)調(diào)試的工具
----adb.exe 一個(gè)重要的調(diào)試橋(連接pc機(jī)與手機(jī)模擬器)sources 存儲(chǔ)android.jar的源碼 goole工程師開(kāi)發(fā)的源代碼存于此
system-images 存儲(chǔ)各個(gè)不同版本模擬器創(chuàng)建需要的鏡像
tools 開(kāi)發(fā)輔助需要用到的工具,
---emulator.exe 模擬器.exe
手動(dòng)配置安卓eclipse開(kāi)發(fā)環(huán)境
eclipse/window/preferces/Android/輸入sdk路徑 :找到sdk存儲(chǔ)的路徑
建立android項(xiàng)目工程
new/Android Applicstion project
或/other/Android/Android Application project
彈框
運(yùn)用名 Application Name : helloworld
工程名 project Name: helloworld
包名 pakge Name : com.itheima.helloworld
minimum required SDK :設(shè)置即你編寫的安卓程序代碼 能夠安裝移植運(yùn)行的最低版本的安卓手機(jī)
API 9 Andorid 2.3 安裝的程序的最低版本手機(jī)是 9(2.3) 9(2.3)以下的版本則不能安裝
Target SDK : 設(shè)置即你編寫的安卓程序代碼 能夠最高兼容版本的手機(jī)
API 21 Andorid 5.0
Compile With : 用..進(jìn)行編譯,即把java代碼打包成jar包 裝在手機(jī)里
API 16 Andorid 4.1 最穩(wěn)定
下一頁(yè)面
選 ceate custum lanucher icon
選 create activity
選 create project in workplace 選擇工作空間
下一頁(yè)面 創(chuàng)建 create activity
eclipse 頁(yè)面
Android virtual Device Manger 安卓虛擬設(shè)備
AVD Name : ipone6
設(shè)備 Device : HVGA 480x320 (小尺寸的 我的點(diǎn)哪配置低,分辨率低)
Target Android 4.1.2 -APIlevel 16
CPU/ABI Intel Atom(x86)
內(nèi)存 Menory oPtion: Ram:512 不能太大,否則溢出
VM 16
手機(jī)內(nèi)存卡 Internal Storage 200M
外卡 SD Card 32M
Snapshot 開(kāi)發(fā)休眠 不建議選
如何把工程項(xiàng)目部署到安卓的模擬器里那?
右擊項(xiàng)目工程/run as/android application
VGA
過(guò)去的一種圖形顯示大小的規(guī)范 480*640 標(biāo)準(zhǔn)
QVGA 分辨率 240x320 // Q 1/4
HVGA 480x320 //H 一半
WVGA 480x800
FWVGA 854x480
ADB
adb:android debug bridge 安卓調(diào)試橋 (pc與手機(jī)相連)
*DOS adb devices
查看鏈接到電腦上的所有的手機(jī)設(shè)備。(模擬器,真實(shí)的手機(jī))
emlator-5554 device 上線
emlator-5555 offline 沒(méi)上線
emlator-5556 offline 沒(méi)上線
如果都顯示的是 offline 說(shuō)明模擬器掉線啦
解決:關(guān)掉 adb調(diào)試橋,重啟adb調(diào)試橋
DOS adb kill-server
DOS adb start-devices
- adb kill-server
殺死adb的調(diào)試橋
- adb start-server
重新啟動(dòng)adb的調(diào)試橋
如何把電腦上的一個(gè)文件(記事本) 安裝到 模擬器(真實(shí)的手機(jī))上
- adb install xxx.apk
DOS adb uninstall C:\user]Administrator\Desktop\com.HonestNotebook.apk
從手機(jī)卸載一個(gè)應(yīng)用程序,參數(shù)是應(yīng)用程序的包名, 打開(kāi)DDMS,查看應(yīng)用程序的包名的路徑
*DOS adb uninstall 應(yīng)用程序的包名
DOS adb uninstall C:\user]Administrator\Desktop\com.HonestNotebook.apk
對(duì)adb.exe進(jìn)行環(huán)境變量配置,可以在DOS的任意目錄下運(yùn)行
path
;E:\Android SDK\adt-bundle-windows-x86_64_20140101\sdk\platform-tools;
DDMS
dalvik debug manager system dalvik 虛擬機(jī)調(diào)式系統(tǒng)
1.Devicer 顯示手機(jī)的各個(gè)軟件的進(jìn)程和路徑
-
file Explorer 文件瀏覽器 上傳到電腦和下載數(shù)據(jù)到手機(jī)
把虛擬機(jī)/手機(jī)的文件倒到桌面上 點(diǎn)擊小標(biāo)簽 pull a file from the device如何把電腦的音樂(lè)文件倒到手機(jī)里 /虛擬機(jī)的sdcard卡可以放些歌曲視頻文件
DDM /sdcard 點(diǎn)擊右上角按鈕 pullafile onto the device 選擇電腦的歌曲即可導(dǎo)入到手機(jī)里
3.Emulator contor 控制模擬器
可以模擬打電話 發(fā)短信
注意:要是Devicer 無(wú)進(jìn)程顯示 則模擬器掉線啦
DOS adb kill-server
adb devices
android應(yīng)用的目錄結(jié)構(gòu)(左邊)
-
src文件夾,java源代碼
onCreate()界面被 開(kāi)啟調(diào)用該方法//設(shè)置應(yīng)用程序顯示的ui setContentView(R.layout.activity_main); gen目錄
自動(dòng)生成的文件夾 ,里面保存的是res資源文件的引用android4.1.2 代表的是引用的android.jar包
libs文件夾
代碼的三方j(luò)ar包。會(huì)自動(dòng)的被添加到android.dependencies目錄下
如何把jar包添加進(jìn)libs里去android dependencies 開(kāi)發(fā)依賴的jar包
bin
編譯生成的臨時(shí)文件和二進(jìn)制文件和上傳到虛擬機(jī)的apk文件都在bin里。會(huì)自動(dòng)生成的-
res目錄
- drawable-ldpi 運(yùn)用程序的自身使用的圖片。 low 低分辨率 小圖
- drawable-mdpi middle 中等分辨率
- drawable-hdpi high高分辨率
- drawable-xhdpi x加大高分辨率
- drawable-xxhdpi 加大再加大的分辨率
- layout 用xml文件編寫的布局
- menu 菜單文件夾
-values 里有個(gè)string.xml文件,代表程序的字符串資源,打開(kāi)可以修改代碼內(nèi)容
AndroidManifest.xml
清單文件,配置應(yīng)用程序的版本,圖標(biāo),名稱等重要信息。
android應(yīng)用程序開(kāi)發(fā)的步驟
1.設(shè)置空間布局 res-->layout文件夾 修改xml布局文件(即修改UI的文檔代碼),修改按鈕
- src目錄 -->編寫MainActivity.java文件的代碼
- 找到關(guān)心的控件,我就要添加什么控件
view findViewById(int id);
View button= findViewById(R.id.bt_call)
4.控件是按鈕對(duì)象button 設(shè)置點(diǎn)擊事件動(dòng)作 Intent setAction(String action) 方法 并獲取數(shù)據(jù) Intent setDate(int data)方法
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel://15671307215"));
- 記得添加權(quán)限。 涉及隱私 注冊(cè)撥打電話權(quán)限android.permission.CALL_PHONE
關(guān)于控件的 一系列、
TextView
EditText
Button
控件的id
<TextView android:id="@+id/textView1"/>
<EditText android:id="@+id/et_number"/>
<Button android:id="@+id/btn_call" />
控件的 事件
android:onClick="getPrivateFile"
android:onClick="read"
android:onClick="write"
Android常見(jiàn)布局
- 線性布局 LinearLayout 按線排列
重要參數(shù)
1.1朝向 orientation = horizontal水平朝向 或 vertical垂直朝向
android:orientation="vertical" 控件垂直朝向
android:orientation="horizontal" 控件水平朝向布局
1.2
width 寬度 控制控件在父窗體里面顯示的比例。
---->weight=fill/match_parent 我的布局填充占滿父窗體(虛擬機(jī)界面)
--->也可以weight=“160px”寬占整個(gè)界面的一半
height 高度 控件布局在窗體里 顯示的高度比例
--> height =warp_parent 控件布局部分填充父窗體(被父窗體包裹)
--> 也可以 height =“160px” 高整個(gè)界面的一半
<Button/EditText
android:layout_width="match_parent" //高布局占滿
android:layout_height="warp_parent" //寬布局部分填充界面
android:orientation="vertical/horizontal" />//控件布局 水平或垂直朝向
1.3 weight 指此按鈕占整個(gè)界面的百分比重
<Button
android:layout_width=" 0dp"
-- weight 指此按鈕占整個(gè)界面的百分比重 2 此按鈕占 正整個(gè)界面的2/3、
android:layout_width=" 2"
android:layout_weight="2"
android:text="按鈕01"
/>
<Button
android:layout_width=" 0dp"
-- weight 指占整個(gè)界面的百分比重 1 此按鈕占 正整個(gè)界面的1/3、
android:layout_weight=" 1"
android:layout_height="wrap_content"
/>
-
相對(duì)布局 Relate Layout :找準(zhǔn)參照物
要不一個(gè)按鈕控件帶 帶有 Parent 就是與父窗體(手機(jī)界面)相關(guān),此空間屬性 不需要id,屬性直接true flase
以父窗體為參照物進(jìn)行布局
要不一個(gè)按鈕控件 如果沒(méi)帶Parent ,此控件的屬性 就要有id,是以某個(gè)控件的id編號(hào)為參照物,進(jìn)行布局
正中間按鈕, 有個(gè) id編號(hào),以此按鈕為參照物
<Button
//為正中間的按鈕定義了一個(gè)id 編號(hào) "@+id/bt_middle"
//在R文件里一保存就會(huì)在class id 類里生成一個(gè) 常量 int bt_minddle=0x7f070000;
android:id="@+id/bt_middle"android:layout_width="wrap_content" android:layout_height="wrap_content" center Horizontal="true" 按鈕控件水平居中 android:layout_centerHorizontal="true" centerInParent="true" 按鈕空間垂直居中 //centerInParent="true" 按鈕控件在父窗體的正中間 android:layout_centerInParent="true" android:layout_centerVertical="true" android:text="正中間按鈕" /> 在中間按鈕的上方按鈕 ,以中間按鈕的編號(hào)為依據(jù)android:layout_above="@id/bt_middle"<Button
android:layout_width="wrap_content "
android:layout_height="wrap_content"
//此按鈕在 中間按鈕 的上方 //layout_above
android:layout_above="@id/bt_middle"
android:layout_centerHorizontal="true"
android:text="↑上方按鈕" />在中間按鈕的下方按鈕 以中間按鈕的編號(hào)為依據(jù) android:layout_below="@id/bt_middle"
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//此按鈕在 中間按鈕 的下方 //layout_below
android:layout_below="@id/bt_middle"
android:layout_centerHorizontal="true"
android:text="↓" />
在中間按鈕的左方按鈕 以中間按鈕的編號(hào)為依據(jù) android:layout_toLeftOf="@id/bt_middle"
<Button
//toLeftOf 控件左邊布局
android:layout_toLeftOf="@id/bt_middle"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="←" />
在中間按鈕的下右方按鈕 以中間按鈕的編號(hào)為依據(jù) android:layout_toRightOf="@id/bt_middle"
<Button
//toRightOf 控件右邊布局
android:layout_toRightOf="@id/bt_middle"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="→" />
凡是控件帶有 Parent 就是與父窗體(手機(jī)界面)相關(guān),此空間屬性 不需要id,屬性直接true flase
如果沒(méi)帶Parent ,此控件的屬性 就要有id,以某個(gè)控件的id為參照物,進(jìn)行布局
此按鈕在父窗體 最左上角。 與中間的按鈕控件 無(wú)關(guān),不需要 中間按鈕的編號(hào) 依據(jù)
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//alignParentTop="true" 按鈕控件與父窗體的最頂部對(duì)齊
android:layout_alignParentTop="true"
//alignParentLeft="true" 按鈕控件與父窗體的最左邊對(duì)齊
android:layout_alignParentLeft="true"
android:text="左上角"
/>
此按鈕在父窗體 最左下角
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//alignParentBottom 按鈕控件與父窗體的最底部對(duì)齊
android:layout_alignParentBottom="true"
//alignParentLeft 按鈕控件與父窗體的最左邊對(duì)齊
android:layout_alignParentLeft="true"
android:text="左下角"
/>
此按鈕在父窗體 最右下角
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//alignParentBottom 按鈕控件與父窗體的最底部對(duì)齊
android:layout_alignParentBottom="true"
//alignParentRight 按鈕控件與父窗體的最右邊對(duì)齊
android:layout_alignParentRight="true"
android:text="右下角"
/>
此按鈕在父窗體 最右上角
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//alignParentTop="true" 按鈕控件與父窗體的最頂部對(duì)齊
android:layout_alignParentTop="true"
//alignParentRight 按鈕控件與父窗體的最右邊對(duì)齊
android:layout_alignParentRight="true"
android:text="右上角"
/>
</RelativeLayout>
- 幀布局 FrameLayout
div 暫停的圖標(biāo),顯示在界面的中間。
幀布局布局特點(diǎn):下個(gè)(后個(gè))控件布局總是懸浮在前個(gè)控件的上方,若下個(gè)控件面積大于前個(gè)控件的面積,則會(huì)覆蓋掉前個(gè)控件。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
//幀布局的控件寬高匹配父窗體
android:layout_width="match_parent"
android:layout_height="match_parent" >
//父窗體是白色底板,TextView就是懸浮在父窗體上的一個(gè) 紅色畫布
<TextView
android:layout_width="300px"
android:layout_height="300px"
//TextView的布局方式:layout_gravity ="center/button/top"http://讓 TextView居中/低/頂 布局
android:layout_gravity="center"
android:background="red" />
// 此控件布局懸浮與上個(gè)紅色控件的上方。
<TextView
android:layout_width="200px"
android:layout_height="200px"
android:layout_gravity="center"
android:background="green" />
// 此控件布局懸浮與上個(gè)綠色控件的上方
<TextView
android:layout_width="100px"
android:layout_height="100px"
android:layout_gravity="center"
android:background="blue" />
// 此控件布局懸浮與上個(gè)藍(lán)色控件的上方
<TextView
android:layout_width="50px"
android:layout_height="50px"
android:layout_gravity="center"
android:background="yellow" />
</FrameLayout>
- 表格布局 TableLayout
表格布局;就是里面有很多的行 TableRow代表行
//第一行 姓名
<TableRow
// TableRow代表行 寬 填充父窗體,高被包裹
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="0px"
android:layout_weight="2" //權(quán)重 占2
android:layout_height="wrap_content"
android:text="姓名:" />
<EditText
android:layout_width="0px"
android:layout_weight="5" //權(quán)重 占5
android:layout_height="wrap_content"
//hint 填寫
android:hint="請(qǐng)?zhí)顚懶彰? />
</TableRow>
//第二行 填身份號(hào)碼
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="0px"
android:layout_weight="2" //權(quán)重 占2
android:layout_height="wrap_content"
android:text="身份證號(hào)碼:" />
<EditText
android:layout_width="0px"
android:layout_weight="5" //權(quán)重 占5
android:layout_height="wrap_content"
android:hint="請(qǐng)?zhí)顚懮矸葑C號(hào)碼" />
</TableRow>
</TableLayout>
- 絕對(duì)布局 AbsoluteLayout
廢棄,不推薦使用。 deprecated 廢棄
720p (1280×720)
1080P (1920X1080)
ANDROID 中顯示像素問(wèn)題
為了適應(yīng)不同分辨率,不同的像素密度,推薦使用dip/dp, 文字使用sp。
px (pixels)像素 就是分辨率
一般HVGA代表320x480像素。該單位不常用. 機(jī)頂盒開(kāi)發(fā)可能用.。
px 當(dāng)界面小分辨率小,控件按鈕占的父窗體界面就多,
當(dāng)界面 分辨率大,控件按鈕占的父窗體界面就小,
dip或dp (device independent pixels)設(shè)備獨(dú)立像素
這個(gè)和設(shè)備硬件有關(guān),一般為了支持WVGA、HVGA和QVGA 推薦使用這個(gè),不依賴像素。
使用dp 像素單位,控件隨著界面的大小(分辨率)變化,而自動(dòng)變化控件大小,但自生的大小不變..占得權(quán)重不變。
sp (scaled pixels — best for text size)比例像素,用于字體
主要處理字體的大小,可以根據(jù)用戶系統(tǒng)的字體自適應(yīng)。
除了上面三個(gè)顯示單位,下面還有幾個(gè)不太常用:
in (inches)英寸
mm (millimeters)毫米
pt (points)點(diǎn),1/72英寸
為了適應(yīng)不同分辨率,不同的像素密度,推薦使用dip/dp,文字使用sp。
點(diǎn)擊事件的幾種寫法
內(nèi)部類實(shí)現(xiàn)onclickListener的接口
class MainActivity extends Activity implements OnClickListener匿名內(nèi)部類實(shí)現(xiàn)onclickListener接口,重寫接口的vid OnClick(view v)點(diǎn)擊事件方法
- 讓當(dāng)前的Activity實(shí)現(xiàn)onclickListener的接口
界面的按鈕比較多,就要建立很多個(gè)內(nèi)部類對(duì)象(對(duì)應(yīng)一個(gè)按鈕控件),麻煩。
如果通過(guò)內(nèi)部類或者匿名內(nèi)部類代碼比較臃腫。
-
在配置文件里布局xml文件里面聲明 onclick屬性 ="方法名"
方法一:使用匿名內(nèi)部類實(shí)現(xiàn)點(diǎn)擊事件,對(duì)于多個(gè)按鈕的點(diǎn)擊事件比較臃腫
public class MainActivity extends Activity {
private Button bt_01;
private Button bt_02;
private Button bt_03;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取 按鈕01的對(duì)象
Button bt_01=(Button) findViewById(R.id.bt_01);
//為按鈕01設(shè)置點(diǎn)擊事件 //調(diào)用 View setOnClickListener(OnClickListener l); l 是個(gè)接口
//使用接口的匿名內(nèi)部類
bt_01.setOnClickListener( new OnClickListener(){
public void onClick(View v) { Toast.makeText(MainActivity.this, "按鈕01被點(diǎn)擊啦", 0).show();}});
//獲取 按鈕02的對(duì)象
Button bt_02=(Button) findViewById(R.id.bt_02);
bt_02.setOnClickListener(new OnClickListener() {
public void onClick(View v) { Toast.makeText(MainActivity.this, "按鈕02被點(diǎn)擊啦", 0).show();}});
//獲取 按鈕03的對(duì)象
Button bt_03=(Button) findViewById(R.id.bt_03);
bt_03.setOnClickListener(new OnClickListener() {
public void onClick(View v) { Toast.makeText(MainActivity.this, "按鈕03被點(diǎn)擊啦", 0).show(); }});
}
}