第一章、環境搭建前端
一、項目下的目錄: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):在包名下建立文件。