Android 我的總結

 

第一章、環境搭建前端

一、項目下的目錄:java

lib:存放源代碼編譯出來的文件。android

res:資源文件夾:文件下的資源是會被編譯的,而且在gen目錄下的R.java中生成ID。shell

assers:文件下的資源是不會被編譯的。windows

project.properties:表明編譯的版本。對應android.jar包的版本。api

gen:自動生成的目錄文件。數組

AndroidManifest.xml:清單文件,程序的配置信息,有啓動的圖標、應用程序名稱、包名、版本號、在桌面上建立快捷方式。緩存

二、環境變量配置:網絡

找E:\Android\adt-bundle-windows-x86-20130729\sdk\platform-tools下的adb.exe。app

方法一:在用戶變量Path中直接輸入路徑。

方法二:在系統變量中新建Android-HOME,值爲sdk路徑(E:\Android\adt-bundle-windows-x86-20130729),而後在用戶變量Path中添加%Android-HOME%\platform-tools。

方法三:在系統變量Path中直接輸入路徑。

三、名詞含義:

(1)avd:Android virtual devices     Android虛擬設備

(2)adt:Android develop tools      Android開發工具(eclipse的插件)

(3)sdk:standard develop kits       標準開發工具集

(4)adb.exe:android debug bridge   Android調試橋   每一個模擬器可看做一個獨立的Linux系統,要與Windows系統聯繫起來就要用到android調試橋。

四、常見的命令操做: 

adb devices :列出全部鏈接的模擬器設備。

reset adb :重啓adb的調試橋(至關於執行了如下兩個指令)。

adb kill-server :殺死adb調試橋。

adb start-server :啓動adb調試橋。

netstat -ano :查詢當前端口占用狀況。

adb install HelloWorld.apk :爲虛擬機安裝apk程序。

adb uninstall HelloWorld :卸載程序。

adb -s emulater-5554 install HelloWorld.apk:如有多個機子,爲指定機子安裝程序。

adb pull 設備中文件 此文件命名 :將設備中的文件導出來。

adb push 文件 導入手機後的名稱 /位置 :將文件導入手機。

adb -v :查看adb版本。

adb shell :遠程鏈接到模擬器Linux終端。能夠對模擬器文件進行操做。ls:顯示目錄結構。ps :列出正在進行的進程。ping :查看手機網絡連通性。

adb logcat :查看日誌文件

Ctrl+F11 :橫豎屏切換。

 

五、apk安裝的過程:

①利用javac將.java文件編譯成.class文件

②用dx.bat將.class文件編譯成.dex文件

③resources.arsc :應用程序全部的資源放到此文件中

 

 

六、eclipse的操做:

(1)將部分代碼抽取出來放在一個方法裏面:選中要抽取的代碼,右鍵Refactor-----Extract method...

(2)捕獲異常:選中代碼,右鍵Surround With-------Try/catch Block...

 

 

第二章、Android基本知識

一、佈局:

(1)霓虹燈效果:FrameLayout層疊嵌套(見例FrameLayout下的NeonLight)。

A.用進程的概念:先new Handler對象handler,調用handler.postDelayed(this,300)方法,實現Runnable接口中的void run(),每300秒執行run()方法。

B.用數組實現TextView的顏色循環變化。

(2)按鈕分而治之:線性佈局linearlayout(見例FrameLyout下的MainActivity)。

A.線性佈局LinearLayout裏面的屬性:android:layout_weight=」1」;表明同一層次的佈局將頁面水平(horizontal)或垂直(vertical)按比例分割。

B.組件裏面的位置屬性是android:layout_gravity=」center」;佈局裏面的位置屬性是android:gravity=」center」;

 

 

二、相對佈局RelativeLayout:注重控件之間的位置關係。

(1)相對與控件的一些屬性:

android:layout_below=」控件ID」       :某控件的下方。

android:layout_toLeftOf=」控件ID」     :某控件的左邊。

android:layout_toRightOf=」控件ID」    :某控件的右邊。

android:layout_above=」控件ID」   :某控件的上邊。

android:layout_alignLeft=」控件ID」     :與某控件左邊對其。

(2)相對於父窗口的屬性:

android:layout_centerInParent=」true」    :在父窗體居中。

android:layout_centerHorizontal=」true」   :在父窗體水平居中。

android:layout_centerVertical=」true」     :在父窗體垂直居中。

android:layout_alignParentButton=」true」  :與父窗體底部對齊。

 

 

三、android中的基本單位:

dp == dip    單位像素密度。在不一樣大小的屏幕分配的像素不一樣,按比例分配。Android中控件的位置單位通常用dp。

px :   固定像素。不論屏幕有多大,距離都是固定的像素,因此不一樣屏幕中控件可能會亂,因此不建議使用。

sp :   和dp差很少,專門爲文字大小建立的單位,。使得文字在縮放的時候不會產生鋸齒。

 

 

四、線性佈局LinearLayout:注重控件在水平或垂直的排列。

(1)LinearLayout中的屬性:

android:orientation=」vertical」 (horizontal)  :佈局裏面控件垂直(水平)排列。

(2)控件中的屬性:

android:layout_weight = 」1」   :權重,將控件按比例分配空間。

android:gravity=」center」      :控件中的內容居中顯示,默認是left。

 

 

五、表格佈局TableLayout:

(1)<TableRow>

放入控件,按表格顯示。

</TableRow>

 

 

六、絕對佈局Absolutely:

(1)控件位置屬性:

android:layout_x=」100dp」   :控件與父窗體左邊界的距離。

android:layout_y=」100dp」   :控件距父窗體上邊界的距離。

 

七、幀佈局FrameLayout:各控件層層覆蓋。

(1)控件中的屬性:

android:visibility=」visible」    :設置此控件可見。

android:visibility=」invisible」   :設置此控件不可見。

例子:幀佈局。實現某一控件的隱藏,如視頻播放器暫停時會出現暫停圖標。

 

 

八、fragment:

(1)概念:幀 片斷 輕量級的activity。封裝佈局(封裝UI的機制)和代碼的組件,可看做一個panel容器。不須要在清單文件中配置。平板的用處比較大。

注:在sdk的版本11後纔有。

(2)建立Fragment的兩種方法

A、在xml中fragment裏面屬性class,指定此片斷中內容的類位置。(見例FirstFragment)。

繼承Fragment的類要實現onCreateView()方法,進行建立,返回View。

B、在主Activity的類中直接調用Fragment類建立對象,用fragment管理器替換當前片斷。(見例Fragment頁面切換)。

得到fragment的管理器:FragmentManager fm = getFragmentManager();

開啓此管理器的事務:FragmentTransaction ft = fm.beiginTransaction();

注:既然是事務(操做同時成功,或操做失敗),在最後就得關閉事務:ft.commit();

Fragment的添加:ft.add();  移除:ft.remove();   

替換(第一個參數:當前Activity的界面):ft.replace(android.R.id.content,fragment1);

(3)Fragment之間的傳值:

Android中傳遞數據通常用bundle,

MyFragment fragment = new MyFragment();

Bundle bundle = new Bundle();

bundle.putString("name""Hello Fragment1");

fragment.setArguments(bundle);

接收傳來的值getArguments()

String name = getFragmentManager().findFragmentByTag("fragment")

.getArguments().getString("name");

(4)Fragment的向下兼容(在低版本的手機上也能夠用fragment):

建立的每一個項目都會在libs的文件夾下有一個android-support-v4.jar包,Fragment導包import android.support.v4.app.Fragment; 得到管理器時FragmentManager fm = getSupportFragmentManager();   Activity繼承的是FragmentActivity。

 

 

九、實現點擊事件的四中方法:

(1)建立一個內部類定義點擊事件。

button.setOnClickListener(new MyListener);

private class MyListener implements OnClickListener{

public void onClick(View view){

//點擊事件的具體操做

}

}

(2)採用匿名內部類建立點擊事件。

button.setOnClickListener(new OnClickListener(){

public void onClick(View view){

//點擊事件的具體操做

}

});

(3)讓Activity實現點擊事件接口裏面的點擊方法。

button.setOnClickListener(this);

好處:此頁面中可能有不少點擊事件,避免用內部類,減小代碼。

(4)在要點擊的view對象裏面添加點擊屬性。

android:onClick=」onclick_button」

 

 

十、電話撥號器:

Intent intent = new Intent();

intent.setAction(Intent.ACTION_CALL);

intent.setData(Uri.parse(「tel」+number));

startActivity(intent);

 

十一、短信發送器:

(1)設置EditText的行數:

android:lines=」5」   行數爲5的文本編輯框。

android:singleline=」true」   單行文本編輯框。

(2)主要代碼:

String number = et_number.getText().toString().trim();

String content = et_content.getText().toString().trim();

//判斷號碼與內容是否爲空

if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){

Toast.makeText(MainActivity.this"號碼或發送內容不能爲空", Toast.LENGTH_SHORT).show();

return;

}

//建立短信管理實例

SmsManager sm = SmsManager.getDefault();

//短信內容過大時,將內容分割,分批發送

ArrayList<String> contents = sm.divideMessage(content);

for(String str:contents){

 //第一個參數:要發送的地址第二個參數:發送方的地址第三個參數:發送內容 第四個參數:是否發送失敗第五個參數:送達報告

sm.sendTextmessage(number,110,str,null,null);

}

 

 

十二、測試

(1)根據測試是否知道源代碼:

黑盒測試:只關心程序執行的過程和結果。

白盒測試:根據源代碼寫測試方法和測試用例。

(2)根據測試的粒度:

方法測試:function test

單元測試:unit test

集成測試:intergration

(3)根據測試的次數:

冒煙測試:smoke test   (android 猴子)

在cmd中進入手機終端adb shell---------monkey--------monkey 5000

此命令在手機上胡亂隨機點擊5000次。

壓力測試:pressure test

 

 

1三、保存文件到手機內存(見例:登錄界面保存密碼)

(1)保存文件:

try {

// File file = new File("/data/data/com.itheima.login/info.txt");

/*

 *爲了不包名的修改等操做,會對文件路徑有影響,沒必要在代碼中改動,

 *谷歌工程師暴露出一個context的方法

 *context.getFilesDir()

 *幫助返回一個目錄/data/data/com.itheima.login/files/

 * 注:在包名根目錄下建立了files的文件夾

 */

String path = context.getFilesDir().toString();

File file = new File(path,"info.txt");

FileOutputStream fos = new FileOutputStream(file);

//將用戶名和密碼保存爲zhangsan##123格式

fos.write((userName+"##"+password).getBytes());

//關閉流

fos.close();

return true;

catch (Exception e) {

e.printStackTrace();

//打印日誌

Log.i(tag, userName);

Log.d(tag, password);

Toast.makeText(context, "用戶信息存儲失敗!", 0).show();

return false;

}

(2)回顯:

try {

String path = context.getFilesDir().toString();

File file = new File(path,"info.txt");

FileInputStream fis = new FileInputStream(file);

BufferedReader bf = new BufferedReader(new InputStreamReader(fis));

String str = bf.readLine();

//zhangsan##123   將此文本分隔出來

String[] s = str.split("##");

Map<String, String> map = new HashMap<String, String>();

map.put("userName", s[0]);

map.put("password", s[1]);

return map;

catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null;

}

(3)catch :緩存文件夾。

 

1四、內存中文件訪問權限(見例:文件訪問權限):

Linux系統下的文件訪問權限,用權限permissions下的十個字符來標識。見下圖。

 

十個字符:位置0:- 表明文件(在內存中定義爲0),d表明目錄(內存中定義爲1)。

  位置1~3:表明當前用戶(此程序),r可讀,w可寫,x可執行,不管何種模式對當前用戶可讀可寫。

  位置4~6:表明當前用戶所在的組。(組:通常狀況下每一個用戶是一個組,系統中有些應用程序是一個組。 查看終端組:在cmd下進入終端adb shell~~~~cd data/data/~~~ls -l 能夠看到第一列爲權限,第二列爲用戶ID,第三列爲用戶所在的組,第四列是包名)。

  位置7~9:表明其餘用戶的權限。

  在內存中:用二進制表示。- --- --- ---  四個十進制表示0 0 0 0,以下:

 

  這些訪問權限值在終端是能夠修改的,首先找到該文件:adb shell~~~cd data/data/~~~cd com.itheima.login~~~cd files~~~ls -l 獲得files目錄的文件,改變文件權限:chmod 666 private.txt

 

(1)私有文件:

FileOutputStream fos = context.openFileOutput(private.txt,Context.MODE_PRIVATE);

(2)可讀的文件:

FileOutputStream fos = context.openFileOutput(read.txt,Context.MODE_WORLD_READABLE);

(3)可寫的文件:

FileOutputStream fos = context.openFileOutput(write.txt,Context.MODE_WORLD_WRITEABLE);

(4)可讀可寫的文件:

FileOutputStream fos = context.openFileOutput(public.txt,Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);

 

(5)默認文件權限類型:

File file = new File(context.getFilesDir().toString(),info.txt);

FileOutputStream fos = new FileOutputStream(file);

 

 

 

第三章、知識點總結

一、從assets中得到某文件的內容:

InputStream in = getActivity().getResources().getAssets().open(文件名);

二、判斷屏幕朝向(橫或豎):

int width = getWindowManager().getDefaultDisplay().getWidth();

int Height = getWindowManager().getDefaultDisplay().getHeight();

水平方向:width>height;     反之是垂直方向。

三、Ctrl+1:xml文件中android:text=」國際化」,裏面的內容能夠用此快捷鍵設置將其替換到string.xml中。

Ctrl+F:修改選中內容,將此頁面中同名的都改掉。

四、Url:統一資源定位符。Uri:統一資源標識符。Uri的範圍大於Url。

五、trim():將字符串中的空格和回車去掉。

String number = editText.getText().toString().trim();

六、android中判斷文本是否爲空:

文本工具類TextUtils的isEmpty()方法,返回boolean類型。

例:if(TextUtils.isEmpty(number)){}

七、日誌信息LogCat:

分等級:verbose  提醒  黑色

Debug   調試  藍色

Info     信息  綠色

Ware    警告  橙色

Error    錯誤  紅色

Log.v(tag,」輸出內容」)   tag爲找到此日誌的標識。同理還有d、i、w、e。

八、context上下文:

就是一個系統類,提供一些方便的api,裏面的方法能夠獲得應用程序的環境(包名,安裝路徑,文件路徑,資源路徑,資產路徑)。

context.getFilesDir() :獲得應用程序的包名下的files文件夾。

context.getCatchDir():獲得緩存目錄(包名下的catch文件夾)。

context.openFileOutput(name,mode):在包名下建立文件。

相關文章
相關標籤/搜索