一:java
1:項目文件android
開發中常常用到的有:數組
app目錄:存放項目代碼、資源文件緩存
build.gradle:項目全局gradle腳本。app
2:app目錄ide
libs:放到libs目錄下的第三方jar包會自動添加到項目構建路徑。工具
java:存放java代碼的地方。佈局
res:資源文件目錄,包括:圖片、佈局、字符串、顏色、樣式、菜單等。gradle
AndroidManifest.xml:項目配置文件。多用於註冊四大組、添加權限等。優化
proguard-rules.pro:項目代碼混淆規則。
3:build.gradle逐項解析
apply plugin: 'com.android.application'//說明module的類型,com.android.application爲程序,com.android.library爲庫 android { compileSdkVersion 22//編譯的SDK版本 buildToolsVersion "22.0.1"//編譯的Tools版本 defaultConfig {//默認配置 applicationId "com.nd.famlink"//應用程序的包名 minSdkVersion 8//支持的最低版本 targetSdkVersion 19//支持的目標版本 versionCode 52//版本號 versionName "3.0.1"//版本名 } sourceSets {//目錄指向配置 main { manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件 java.srcDirs = ['src']//指定source目錄 resources.srcDirs = ['src']//指定source目錄 aidl.srcDirs = ['src']//指定source目錄 renderscript.srcDirs = ['src']//指定source目錄 res.srcDirs = ['res']//指定資源目錄 assets.srcDirs = ['assets']//指定assets目錄 jniLibs.srcDirs = ['libs']//指定lib庫目錄 } debug.setRoot('build-types/debug')//指定debug模式的路徑 release.setRoot('build-types/release')//指定release模式的路徑 } signingConfigs {//簽名配置 release {//發佈版簽名配置 storeFile file("fk.keystore")//密鑰文件路徑 storePassword "123"//密鑰文件密碼 keyAlias "fk"//key別名 keyPassword "123"//key密碼 } debug {//debug版簽名配置 storeFile file("fk.keystore") storePassword "123" keyAlias "fk" keyPassword "123" } } buildTypes {//build類型 release {//發佈 minifyEnabled true//混淆開啓 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆規則文件 signingConfig signingConfigs.release//設置簽名信息 } debug {//調試 signingConfig signingConfigs.release } } packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/MANIFEST.MF' } lintOptions { abortOnError false//lint時候終止錯誤上報,防止編譯的時候莫名的失敗 } } dependencies { compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: ['*.jar']) //編譯lib目錄下的.jar文件 compile project(':Easylink')//編譯附加的項目 compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'//編譯來自Jcenter的第三方開源庫 }
4:菜單
菜單有多種:optionMenu、上下文菜單、彈出菜單等。
菜單能夠在代碼中動態添加,也能夠在xml中定義好菜單項,在代碼中加載。
菜單能夠分組管理菜單項,也能夠擁有子菜單。
5:Intent
Intent能夠用於啓動四大組件,能夠攜帶數據,不過只能經過鍵值對的形式攜帶基本類型數據。
Intent有兩種:顯式Intent和隱式Intent。
隱式Intent經過添加action、category、data等附加內容,來匹配系統中符合要求(註冊時配置 intent-filter)的活動、服務等。
6:返回數據的跳轉
啓動另外一個活動能夠有兩種方法,其中startActivityForResult(intent,請求碼)啓動的跳轉,能夠在活動中重寫回調方法onActivityResult(請求碼,結果碼,intent)來獲取返回數據,經過請求碼匹配具體請求的返回、經過結果碼判斷結果的類型,經過intent提取返回的數據。
7:保存Activity中的數據
活動跳轉後,以前的活動可能會被回收,若想保存以前的活動的數據,使得返回這個活動時數據仍在,能夠在活動中重寫 onSaveInstanceState(bundle)回調方法,這個方法會在活動被回收以前調用,把數據存在budle中,那麼下一次該活動重建時,能夠在onCreate(bundle)中經過bundle取回數據。
8:精肯定位活動
能夠定義一個BaseActivity,繼承自AppCompatActivity,而後定義一些通用的方法、操做,如:打印當前活動信息。
另其餘活動繼承BaseActivity,便可在項目運行時知道哪一個頁面對應哪一個活動了。
9:批量管理活動
能夠定義一個工具類,其中維護一個活動list:
public class ActivityCollector { public static List<Activity> activities = new ArrayList<>(); public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishAll(){ for(Activity activity:activities){ if(!activity.isFinishing()){ activity.finish(); } } activities.clear(); }
而後,定義一個父Activity,做爲其餘activity的基類:
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityCollector.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); } }
其餘Activity繼承BaseActivity,那麼每當活動建立時就會被添加到list中,銷燬就移除。在任何須要批量銷燬活動,徹底退出程序時,只需經過 ActivityCollector.finishAll() 銷燬全部活動便可。
二:UI
1:android:gravity:控件中內容的對齊方式。
2:android:layout_gravity:控件自己在父容器中的對齊方式。
3:進度條
有兩種,其中:圓形的用於顯示耗時操做,經過visibility控制可見性來顯示或隱藏;水平進度條則能夠經過在代碼中動態設置progress來更改進度值,多用於下載等操做。
4:彈窗
AlertDialog的使用步驟爲:建立builder——經過builder.setXX()設置彈窗標題、內容、按鈕點擊事件等——最後顯示彈窗
5:進度彈窗
不一樣於通常的環形進度條,ProgressDialog還額外顯示文字內容,以告知用戶當前正在執行什麼耗時操做。
建立progressdialog——設置標題、內容等——show()顯示——經過dismiss()關閉
6:佈局
線性佈局中的比例佈局:設置哪一個方向上按比例佈局,則該方向上大小設置爲0dp,而後經過layout_weight設置權重。
相對佈局:控件與父容器的相對、控件與已有控件的相對,佈局的位置規律爲:相對於參照物的上下左右中。
幀佈局:幀佈局中的控件末日左上角對齊,而且後定義的控件會覆蓋在最上面。幀佈局能夠用於自定義一些須要重合在一塊兒的視圖元素,好比:自定義帶文字的圖片按鈕、帶有文字提示的視頻播放界面、浮動在圖片或視頻播放控件之上的字幕等。
百分比佈局:可使用第三方擴展庫。
7:自定義控件
方法一:使用佈局定義好一個視圖效果,而後在其餘佈局文件中include。
方法二:繼承android內置控件類定義新的控件類,在控件類的構造方法中inflate定義好的layout文件,而後在其餘佈局文件中經過新控件類的完整路徑來使用該控件。
8:ListView的使用步驟
定義數據類——定義列表項視圖佈局——繼承Adapter,定義adapter類,重寫getview方法:獲取當前數據項、inflate列表項佈局文件、爲列表項控件賦值、返回view
在活動代碼中,建立數據數組——建立adapter,把上下文、列表項佈局文件id、數據數組做爲參數——爲activity視圖中的listview設置adapter
9:listview的優化
初步優化,使用convertView緩存以前加載的佈局;
進一步優化,建立一個內部類ViewHolder,裏面的成員變量和view中所包含的組件個數、類型相同,在convertview爲null的時候,把findviewbyId找到的控件賦給ViewHolder中對應的變量,就至關於先把它們裝進一個容器,下次要用的時候,直接從容器中獲取。
10:RecyclerView的使用
定義適配器類,重寫其中的三個方法——在activity代碼中建立數據數組——建立layoutmanager,經過layoutmanager設置佈局方式,並設置給recyclerview控件——建立adapter——爲activity佈局文件中的recyclerview控件設置adapter
【咱們看到,RecyclerView不只須要adapter,還須要layoutmanager。經過layoutManeger,咱們能夠設置RecyclerView的佈局排列方式:垂直、水平、網格、瀑布流】
【列表項的點擊事件在adapater中定義,能夠定義列表項總體點擊、列表項中不一樣空間元素點擊 的事件響應】
【經常使用的RecyclerView開源庫整理:http://www.jianshu.com/p/154891851fe2 http://blog.csdn.net/mynameishuangshuai/article/details/51153978】
三:碎片
1:碎片的使用步驟
定義佈局文件——建立碎片類,繼承自Fragment,重寫onCreateView方法,在其中inflate對應的佈局文件——在activity的佈局文件中經過路徑使用碎片、在代碼中動態使用碎片
2:在代碼中動態使用碎片
建立碎片實例——獲取FragmentManager——beginTransaction()——add、replace、remove動態使用碎片實例——commit()
3:模擬返回棧
把碎片的使用歷史加入返回棧中,點擊返回按鈕時返回上一個碎片而不是退出當前activity。
建立碎片實例——獲取FragmentManager——建立transaction——add、replace、remove動態使用碎片實例——transaction.addToBackStack(null)——commit()
4:碎片與活動之間的通訊調用
活動中調用碎片:在activity代碼中經過findFragmentById(id)獲取活動佈局中的碎片實例,而後經過該實例調用碎片類中的方法、爲碎片中的控件賦值等
碎片中調用活動:碎片代碼中國年經過getActivity()方法獲取與當前碎片相關聯的活動實例,而後經過該實例調用方法、操做控件
碎片之間的調用:在一個碎片中獲取關聯的活動實例,而後經過活動實例獲取另外一個碎片實例,經過另外一個碎片實例便可進行調用。
5:碎片保存臨時數據
相似於activity實例,碎片也能夠經過onSaveInstanceState()方法保存數據,以後在碎片的onCreateView等方法中均可以經過參數bundle從新提取。
6:碎片的適配
在res目錄下新建 layout-限定符 文件夾,在其中定義佈局文件,那麼程序在運行時,就會根據屏幕的尺寸,自動加載符合格式的文件夾下的視圖文件。
android中的限定符有: