Android Butterknife 8.4.0 使用方法總結

来源:http://www.cnblogs.com/zhaoyanjun/archive/2016/10/31/6016341.html
-Advertisement-
Play Games

轉載請標明出處:http://www.cnblogs.com/zhaoyanjun/p/6016341.html 本文出自 "【趙彥軍的博客】" 前言 ButterKnife 簡介 ButterKnife是一個專註於Android系統的View註入框架,可以減少大量的findViewById以及se ...


轉載請標明出處:http://www.cnblogs.com/zhaoyanjun/p/6016341.html
本文出自【趙彥軍的博客】

前言

  • ButterKnife 簡介

    ButterKnife是一個專註於Android系統的View註入框架,可以減少大量的findViewById以及setOnClickListener代碼,可視化一鍵生成。

項目github地址:https://github.com/JakeWharton/butterknife

  • ButterKnife 優勢

    1、強大的View綁定和Click事件處理功能,簡化代碼,提升開發效率
    2、方便的處理Adapter里的ViewHolder綁定問題
    3、運行時不會影響APP效率,使用配置方便
    4、代碼清晰,可讀性強

如何添加依賴

  • 在項目的project 的build.gredle 文件中的dependencies標簽下添加。

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

例如:

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
  • 在module的build.gredle 文件中添加

    apply plugin: 'android-apt'

  • 在module的build.gredle 文件中的dependencies標簽中添加

    compile 'com.jakewharton:butterknife:8.4.0'
    apt 'com.jakewharton:butterknife-compiler:8.4.0'

例如

apply plugin: 'com.android.application'
apply plugin: 'android-apt'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"

    defaultConfig {
        applicationId "com.zyj.wifi"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    
    compile 'com.jakewharton:butterknife:8.4.0'
    apt 'com.jakewharton:butterknife-compiler:8.4.0'
}

如何使用

  • 控制項id 註解: @BindView()
package com.zyj.wifi;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;

import butterknife.BindView;
import butterknife.ButterKnife;

public class ButterknifeActivity extends AppCompatActivity {

    @BindView( R.id.button1 )
    public Button button1 ;
    
    // 註意:button 的修飾類型不能是:private 或者 static 。 否則會報錯:錯誤: @BindView fields must not be private or static. (com.zyj.wifi.ButterknifeActivity.button1)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_butterknife);
        //綁定activity
        ButterKnife.bind( this ) ;

        button1.setText( "I am a button ");
    }
}
  • fragment 使用
package com.zyj.wifi;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import butterknife.BindView;
import butterknife.ButterKnife;

public class ButterknifeFragment extends Fragment {

    @BindView( R.id.button1 )
    public Button button1 ;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_butterknife, container, false);

        //綁定fragment
        ButterKnife.bind( this , view ) ;
        button1.setText( "I am a button ");
        return view ;
    }
}
  • @BindString() :綁定string 字元串
package com.zyj.wifi;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;

import butterknife.BindString;
import butterknife.BindView;
import butterknife.ButterKnife;

public class ButterknifeActivity extends AppCompatActivity {

    @BindView( R.id.button1 ) //綁定button 控制項
    public Button button1 ;

    @BindString( R.string.app_name )  //綁定string 字元串
    String meg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_butterknife);

        //綁定activity
        ButterKnife.bind( this ) ;

        button1.setText( meg );
    }
}

  • @BindArray() : 綁定string裡面array數組
<resources>
    <string name="app_name">WiFi管家</string>
    
    <string-array name="city">
        <item>廈門市</item>
        <item>福州市</item>
        <item>泉州市</item>
        <item>漳州市</item>
        <item>龍岩市</item>
    </string-array>
    
</resources>



package com.zyj.wifi;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;

import butterknife.BindArray;
import butterknife.BindView;
import butterknife.ButterKnife;

public class ButterknifeActivity extends AppCompatActivity {

    @BindView( R.id.button1 ) //綁定button 控制項
    public Button button1 ;

    @BindArray(R.array.city )  //綁定string裡面array數組
    String [] citys ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_butterknife);

        //綁定activity
        ButterKnife.bind( this ) ;

        button1.setText( citys[0] );
    }
}

  • @BindBitmap( ) : 綁定Bitmap 資源
package com.zyj.wifi;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

import butterknife.BindBitmap;
import butterknife.BindView;
import butterknife.ButterKnife;

public class ButterknifeActivity extends AppCompatActivity {

    @BindView( R.id.imageView ) //綁定ImageView 控制項
    public ImageView imageView ;

    @BindBitmap( R.mipmap.wifi )  //綁定Bitmap 資源
    public Bitmap wifi_bitmap ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_butterknife);

        //綁定activity
        ButterKnife.bind( this ) ;

        imageView.setImageBitmap( wifi_bitmap );
    }
}
  • @BindColor( ) : 綁定一個顏色值
package com.zyj.wifi;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;

import butterknife.BindColor;
import butterknife.BindView;
import butterknife.ButterKnife;

public class ButterknifeActivity extends AppCompatActivity {

    @BindView( R.id.button1 )  //綁定一個控制項
    public Button button1 ;

    @BindColor( R.color.colorAccent ) int black ;  //綁定一個顏色值

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_butterknife);

        //綁定activity
        ButterKnife.bind( this ) ;

        button1.setTextColor(  black );

    }
}

  • @OnClick( ) : 綁定控制項點擊事件
  • @OnLongClick( ) : 綁定控制項長按事件
package com.zyj.wifi;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnLongClick;

public class ButterknifeActivity extends AppCompatActivity {

    @OnClick(R.id.button1 )   //給 button1 設置一個點擊事件
    public void showToast(){
        Toast.makeText(this, "is a click", Toast.LENGTH_SHORT).show();
    }

    @OnLongClick( R.id.button1 )    //給 button1 設置一個長按事件
    public boolean showToast2(){
        Toast.makeText(this, "is a long click", Toast.LENGTH_SHORT).show();
        return true  ;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_butterknife);

        //綁定activity
        ButterKnife.bind( this ) ;

    }
}
  • zelezny : Butterknife插件的使用

    插件的安裝

這裡寫圖片描述

這裡寫圖片描述

插件的使用

安裝完成插件後,會提示重啟AS,重啟完後,可以寫一個佈局並且新建一個代碼類測試下。測試的過程中要註意的是,需要將游標移到setContentView(R.layout.acty_login),將游標放到R.layout.acty_login,然後右鍵Generate就有了。要註意一定要將游標放在R.layout.acty_login上面。

這裡寫圖片描述

這裡需要註意的是在勾選控制項的界面上,有一個CreateViewHolder , 很明顯這個是專門為ListView或者RecyclerView的適配器專門提供的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄: 創建canvas。 繪製直線、多邊形和七巧板。 繪製弧和圓。 (有些圖過於寬,被擠壓了。可以去相冊【canvas用到的圖。】看原圖。) 創建canvas。 HTML5的新標簽<canvas></canvas> 在使用時會添加id,通過id來獲取canvas元素來進行繪圖操作。 可以添加樣式。 ...
  • 1.只舍不如,保留小數點後兩位 NSString *leavemoney = @"4661998.08"; NSString *restinterest = @"44818.1283"; NSString *totalmoney = @"16808934.4083"; NSString *money ...
  • 目前開發只想最低版本支持iOS8了,iOS8以前的就不管了,然後現在iOS9和iOS10出來以後,有些新的API,也有些棄用的API,為了相容,有時候代碼裡面需要編寫判斷不同iOS版本,或者只允許指定的iOS版本才可以編譯或者執行。 需要用到以下方式,以下方式只針對OC(Swift的寫法暫時還不清楚 ...
  • 用戶點擊的時候的處理 ...
  • 白天在做SDK23版本的適配,遇到了不少坑,現在抽空記下來,以此為戒。 首先要知道哪些坑,就得先瞭解一些定義和基本使用方式。 那麼先介紹一下動態申請的許可權分組情況。 下麵的許可權組是由谷歌官方定義的,目的是在申請許可權時,只要用戶允許同一許可權組的任意一條許可權,那麼該組的其他許可權也就預設是允許的。不過據高 ...
  • 命令行1、啟動SDK Manager: android2、啟動DDMS:dams3、獲取當前運行的所有模擬器:adb devices4、安裝應用程式:adb install -r 應用程式.apk 卸載應用程式:adb uninstall 應用程式包名5、獲取模擬器中的文件:adb pull <re ...
  • 上一篇文章我對GCD的幾個基本概念做了介紹,但是大家看完了可能覺得對理解GCD並沒有什麼卵用。其實會用GCD其實很簡單,只要記住兩條就可以了。 1. 主隊列里的任務必須在非同步函數中執行。 主隊列里的任務如果在同步函數中執行,就會造成死鎖。什麼是死鎖?容我舉例來說明。 看到沒有,主隊列里的任務沒有執行 ...
  • ↓↓圓形進度條(源代碼下有屬性解釋)↓↓ 一、shape 樣式:(在drawable新建--》new--》Drawable resource file 並把原父級標簽selector改為shape ) ↑↑↑↑圓形進度條↑↑↑↑↑ ↓↓↓android:shape屬性指定形狀↓↓↓ rectangl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...