Android基礎(chǔ)第一天

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=========480
800
4.7------WXGA-------1280*720

十 DDMS

  1. 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è)備截屏。

  2. 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)行的三種方式:

    1. 右擊工程 run as
    2. 工具欄的按鈕
    3. 快捷鍵: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 包

  1. build-tools 編譯需要用到的所有工具,把開(kāi)發(fā)的程序裝進(jìn)手機(jī)

  2. docs 開(kāi)發(fā)的離線文檔

  3. extras 額外工具,模擬器加速器,向下兼容的jar包
    ---android/ support:存儲(chǔ)的是goole開(kāi)發(fā)的新特性jar包
    -----intel /...Mannger(硬件加速管理器)/IntelHaxm.exe 提高電腦inter的運(yùn)行速度(i3以后處理器)

  4. platforms 開(kāi)發(fā)需要的版本平臺(tái),每個(gè)平臺(tái)的android.jar在對(duì)應(yīng)的文件夾里面

  5. platform-tools 開(kāi)發(fā)調(diào)試的工具
    ----adb.exe 一個(gè)重要的調(diào)試橋(連接pc機(jī)與手機(jī)模擬器)

  6. sources 存儲(chǔ)android.jar的源碼 goole工程師開(kāi)發(fā)的源代碼存于此

  7. system-images 存儲(chǔ)各個(gè)不同版本模擬器創(chuàng)建需要的鏡像

  8. 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)程和路徑

  1. 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)(左邊)

  1. src文件夾,java源代碼
    onCreate()界面被 開(kāi)啟調(diào)用該方法

      //設(shè)置應(yīng)用程序顯示的ui
     setContentView(R.layout.activity_main);
    
  2. gen目錄
    自動(dòng)生成的文件夾 ,里面保存的是res資源文件的引用

  3. android4.1.2 代表的是引用的android.jar包

  4. libs文件夾
    代碼的三方j(luò)ar包。會(huì)自動(dòng)的被添加到android.dependencies目錄下
    如何把jar包添加進(jìn)libs里去

  5. android dependencies 開(kāi)發(fā)依賴的jar包

  6. bin
    編譯生成的臨時(shí)文件和二進(jìn)制文件和上傳到虛擬機(jī)的apk文件都在bin里。會(huì)自動(dòng)生成的

  7. 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)容
  8. AndroidManifest.xml

清單文件,配置應(yīng)用程序的版本,圖標(biāo),名稱等重要信息。


android應(yīng)用程序開(kāi)發(fā)的步驟

1.設(shè)置空間布局 res-->layout文件夾 修改xml布局文件(即修改UI的文檔代碼),修改按鈕

  1. src目錄 -->編寫MainActivity.java文件的代碼
  2. 找到關(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"));

  1. 記得添加權(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)布局

  1. 線性布局 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"
/>

  1. 相對(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>


  1. 幀布局 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>

  1. 表格布局 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>

  1. 絕對(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)擊事件的幾種寫法

  1. 內(nèi)部類實(shí)現(xiàn)onclickListener的接口
    class MainActivity extends Activity implements OnClickListener

  2. 匿名內(nèi)部類實(shí)現(xiàn)onclickListener接口,重寫接口的vid OnClick(view v)點(diǎn)擊事件方法

  1. 讓當(dāng)前的Activity實(shí)現(xiàn)onclickListener的接口

界面的按鈕比較多,就要建立很多個(gè)內(nèi)部類對(duì)象(對(duì)應(yīng)一個(gè)按鈕控件),麻煩。
如果通過(guò)內(nèi)部類或者匿名內(nèi)部類代碼比較臃腫。

  1. 在配置文件里布局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(); }});
            
  }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容