android最佳實踐(二)

這是一個系列,咱們將其命名爲android最佳實踐,若是你尚未看以前的文章:java

Android最佳實踐(一)android

android最佳實踐(三)git

android最佳實踐(四)github

android最佳實踐(五)sql

Android最佳實踐(六)之掃描二維碼模塊segmentfault

關於項目

博文會根據項目的進度進行相關介紹,其會分爲多個模塊,每一個模塊互不依賴,各個模塊都是單獨的學習內容,如sqlite學習模塊,contacts聯繫人模塊等。api

新建項目

相信大部分童鞋均可以自定義項目了,那麼在此,我簡單介紹下android studio新建項目的過程。
圖片描述服務器

最終,android studio會爲你生成2個build.gradle文件,你能夠選擇android視圖瀏覽文件,根據google最新提供的sdk版本,咱們把項目設置爲api 14~23,打開你的project項目的gradle文件,在dependencies中app

classpath 'com.android.tools.build:gradle:1.5.0'

你沒必要在乎這一版本是否和我一致,由於默認的jcenter倉庫使用的是https且服務器在國外,咱們將buildscript下的repositories和allprojects下的repositories添加框架

mavenLocal()
maven{ url 'http://maven.oschina.net/content/groups/public/'}

其含義爲優先在本地倉庫和開源中國maven倉庫搜尋jar或者aar包。

子模塊

你會發現,android studio會默認爲你建立demo模塊,其主要包含3部分:

  • plugin android插件

  • android android代碼塊,用於定義app的版本構建信息

  • dependencies 該模塊的依賴庫

由於該項目會涉及到不少模塊,而每一個模塊都會對應一個gradle文件,而每一個gradle文件都會有對應的android構建信息,這些信息大部分重複,且維護起來很是困難,所以,咱們提早修改:

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'
       }
    }

這樣,在你新建的模塊中,你徹底能夠去除掉該模塊對應的gradle文件中的代碼,是否是很方便?

demo模塊的搭建

該模塊是運行在你手機上的app,因此基本骨架和UI部分須要在此編寫。對應的相關模塊將會以下圖所示:

圖片描述

那麼如何展現這些模塊的特性呢?

在此,我向你們介紹AppCompatActivity和ButterKnife以及CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout,Toolbar,NestedScrollView的使用,固然也包括RecyclerView,CardView的使用。

其中大部分都是android v7包中的新組件,須要你們系統學習,ButterKnife則是jk大神的依賴注入框架。

ButterKnife的使用詳解

神馬是ButterKnife,利用註解,你再也不使用findviewbyid初始化視圖了。關於ButterKnife的詳細介紹,在此就很少言了,那麼如何使用它呢?

在使用它以前,你須要android studio的一個強大插件Zelezny,關於安裝插件,能夠翻看第一篇文章:

圖片描述

安裝完成後重啓android studio。

好比如今你在你的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會自動在該視圖對應的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是否是利用反射,那樣將會致使性能問題。其實呢,你們不用擔憂,代碼會在加載視圖的時候自動生成,自動生成的代碼以下所示:

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方法。

監聽綁定

好比你的視圖裏面有多個button,這時候,你確定是先初始化這些button,而後再爲每一個button添加監聽事件,而後該類實現onClick接口,重寫該接口,利用switch方法,判斷點擊了哪一個按鈕。其實,你可使用ButterKnife:

@OnClick(R.id.submit)
public void submit(View view) {
  // TODO submit data to server...
}

而對於的參數是可選的:

@OnClick(R.id.submit)
public void submit() {
  // TODO submit data to server...
}

定義一個特殊類型,其會爲你自動轉換:

@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();
  }
}

是否是超級方便!!!

關於ButterKnife的詳細介紹和使用方法,你能夠查看:http://jakewharton.github.io/butterknife/

好了,今天就講這麼多了,下一篇博客,將會爲你帶來項目的搭建和AppCompatActivity,CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout,Toolbar,NestedScrollView的使用,若是你喜歡這篇博文,請點贊和關注專欄哦!!!

相關文章
相關標籤/搜索