Android開發(fā)之關(guān)于項目
本系列文章會根據(jù)項目的進度進行相關(guān)介紹,其會分為多個模塊,每個模塊互不依賴,各個模塊都是單獨的學(xué)習(xí)內(nèi)容,如sqlite學(xué)習(xí)模塊,contacts聯(lián)系人模塊等。
新建項目
相信大部分童鞋都可以自定義項目了,那么在此,我簡單介紹下android studio新建項目的過程。

最終,android studio會為你生成2個build.gradle文件,你可以選擇android視圖瀏覽文件,根據(jù)google最新提供的sdk版本,我們把項目設(shè)置為api 14~23,打開你的project項目的gradle文件,在dependencies中
classpath 'com.android.tools.build:gradle:1.5.0'
你不必在意這一版本是否和我一致,因為默認的jcenter倉庫使用的是https且服務(wù)器在國外,我們將buildscript下的repositories和allprojects下的repositories添加
mavenLocal()
maven{ url 'http://maven.oschina.net/content/groups/public/'}
其含義為優(yōu)先在本地倉庫和開源中國maven倉庫搜尋jar或者aar包。
子模塊
你會發(fā)現(xiàn),android studio會默認為你創(chuàng)建demo模塊,其主要包含3部分:
- plugin android插件
- android android代碼塊,用于定義app的版本構(gòu)建信息
- dependencies 該模塊的依賴庫
因為該項目會涉及到很多模塊,而每個模塊都會對應(yīng)一個gradle文件,而每個gradle文件都會有對應(yīng)的android構(gòu)建信息,這些信息大部分重復(fù),且維護起來非常困難,因此,我們提前修改:
subprojects{
configure(allprojects - project(':demo')) {
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion '23.0.2'
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
lintOptions {
abortOnError false
}
}
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.2'
}
}
這樣,在你新建的模塊中,你完全可以去除掉該模塊對應(yīng)的gradle文件中的代碼,是不是很方便?
demo模塊的搭建
該模塊是運行在你手機上的app,所以基本骨架和UI部分需要在此編寫。對應(yīng)的相關(guān)模塊將會如下圖所示:

那么如何展示這些模塊的特性呢?
在此,我向大家介紹AppCompatActivity和ButterKnife以及CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout,Toolbar,NestedScrollView的使用,當然也包括RecyclerView,CardView的使用。
其中大部分都是android v7包中的新組件,需要大家系統(tǒng)學(xué)習(xí),ButterKnife則是jk大神的依賴注入框架。
ButterKnife的使用詳解
神馬是ButterKnife,利用注解,你不再使用findviewbyid初始化視圖了。關(guān)于ButterKnife的詳細介紹,在此就不多言了,那么如何使用它呢?
在使用它之前,你需要android studio的一個強大插件Zelezny,關(guān)于安裝插件,可以翻看第一篇文章:

安裝完成后重啟android studio。
比如現(xiàn)在你在你的activity_main.xml中可以定義一個button,并賦值給其id。然后打開你的MainActivity.java文件,將光標移至R.layout.activity_main上,使用快捷鍵ALT + Insert鍵(注意我使用的eclipse快捷鍵),選擇generate butterknife injections,選擇確認,該插件會自動為你生成@Bind,以及Butterknife.bind(this),就像這樣:

ButterKnife.bind(this)
當你在某activity或者某fragment中使用@Bind注解的時候,你需要在oncreate方法上添加該方法,其含義為綁定該視圖,即@Bind中的id會自動在該視圖對應(yīng)的layout中尋找,所以其需要在setContentView方法之后添加。特別注意的是ButterKnife.bind(this)在fragment中并不適用,你需要使用:
public class FancyFragment extends Fragment {
@Bind(R.id.button1) Button button1;
@Bind(R.id.button2) Button button2;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fancy_fragment, container, false);
ButterKnife.bind(this, view);
// TODO Use fields...
return view;
}
@Override public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
}
可能你會問了,Butterknife是不是利用反射,那樣將會導(dǎo)致性能問題。其實呢,大家不用擔心,代碼會在加載視圖的時候自動生成,自動生成的代碼如下所示:
public void bind(ExampleActivity activity) {
activity.subtitle = (android.widget.TextView) activity.findViewById(2130968578);
activity.footer = (android.widget.TextView) activity.findViewById(2130968579);
activity.title = (android.widget.TextView) activity.findViewById(2130968577);
}
如果大家還是不放心的話,可以利用debug模式,查看bind方法。
監(jiān)聽綁定
比如你的視圖里面有多個button,這時候,你肯定是先初始化這些button,然后再為每個button添加監(jiān)聽事件,然后該類實現(xiàn)onClick接口,重寫該接口,利用switch方法,判斷點擊了哪個按鈕。其實,你可以使用ButterKnife:
@OnClick(R.id.submit)
public void submit(View view) {
// TODO submit data to server...
}
而對于的參數(shù)是可選的:
@OnClick(R.id.submit)
public void submit() {
// TODO submit data to server...
}
定義一個特殊類型,其會為你自動轉(zhuǎn)換:
@OnClick(R.id.submit)
public void sayHi(Button button) {
button.setText("Hello!");
}
那么你有多個按鈕呢:
@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
if (door.hasPrizeBehind()) {
Toast.makeText(this, "You win!", LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Try again", LENGTH_SHORT).show();
}
}
是不是超級方便?。。?/p>
關(guān)于ButterKnife的詳細介紹和使用方法,你可以查看:http://jakewharton.github.io/butterknife/
好了,今天就講這么多了,下一篇,將會為你帶來項目的搭建和AppCompatActivity,CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout,Toolbar,NestedScrollView的使用?。?!
相關(guān)文章
詳解Android開發(fā)技巧之PagerAdapter實現(xiàn)類的封裝
這篇文章主要介紹了詳解Android開發(fā)技巧之PagerAdapter實現(xiàn)類的封裝,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
基于Android RecyclerView實現(xiàn)宮格拖拽效果
在Android發(fā)展的進程中,網(wǎng)格布局一直比較有熱度,其中一個原因是對用戶來說便捷操作,對app廠商而言也會帶來很多的曝光量,本篇我們會使用RecyclerView來實現(xiàn)網(wǎng)格拖拽,本篇將結(jié)合圖片分片案例,實現(xiàn)拖拽效果,需要的朋友可以參考下2024-03-03
Android編程基礎(chǔ)之簡單Button事件響應(yīng)綜合提示控件Toast應(yīng)用示例
這篇文章主要介紹了Android編程基礎(chǔ)之簡單Button事件響應(yīng)綜合提示控件Toast應(yīng)用,結(jié)合實例形式分析了Button事件響應(yīng)與Toast提醒的相關(guān)操作技巧,需要的朋友可以參考下2016-10-10
Android實現(xiàn)可使用自定義透明Dialog樣式的Activity完整實例
這篇文章主要介紹了Android實現(xiàn)可使用自定義透明Dialog樣式的Activity,結(jié)合完整實例形式分析了Android Activity自定義style的操作步驟與相關(guān)技巧,需要的朋友可以參考下2016-07-07
Android Intent-Filter匹配規(guī)則解析
這篇文章主要介紹了Android Intent-Filter匹配規(guī)則的相關(guān)資料,幫助大家更好的進行Android開發(fā),感興趣的朋友可以了解下2020-12-12
Android畫圖實現(xiàn)MPAndroidchart折線圖示例詳解
這篇文章主要為大家介紹了Android畫圖實現(xiàn)MPAndroidchart折線圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
超簡單Android集成華為HMS Scankit 掃碼SDK實現(xiàn)掃一掃二維碼
這篇文章主要介紹了超簡單Android集成華為HMS Scankit 掃碼SDK實現(xiàn)掃一掃二維碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

