Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách sử dụng ButterKnife trong Android

Giới thiệu

Ví dụ này minh họa cách sử dụng thư viện ButterKnife để binding view và sự kiện trong Android, giúp giảm code boilerplate findViewById().

Lưu ý: ButterKnife đã ngừng phát triển (deprecated). Google khuyến nghị sử dụng View Binding hoặc Data Binding thay thế.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="..........."
        android:textSize="16sp"
        android:textStyle="bold"
        android:textAllCaps="true" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="..........."
        android:textSize="16sp"
        android:textStyle="bold"
        android:textAllCaps="true" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="..........."
        android:textSize="16sp"
        android:textStyle="bold"
        android:textAllCaps="true" />

    <Button
        android:id="@+id/btnLoadText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="Tải văn bản"
        android:textSize="16sp"
        android:textStyle="bold" />

</LinearLayout>

Bước 3: Thêm dependency (build.gradle Module: app)

dependencies {
    implementation 'com.jakewharton:butterknife:10.2.3'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
}

Bước 4: Viết code MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.textView) TextView textView;
    @BindView(R.id.textView2) TextView textView2;
    @BindView(R.id.textView3) TextView textView3;
    @BindView(R.id.btnLoadText) Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        
        // Không cần findViewById nữa!
    }

    @OnClick(R.id.btnLoadText)
    public void onLoadTextClick() {
        textView.setText("Xin chào, bạn khỏe không?");
        textView2.setText("Chúc bạn một ngày tốt lành!");
        textView3.setText("Bạn thật tuyệt vời.");
    }
}

Các annotation chính:

  • @BindView: Bind view (thay findViewById)
  • @OnClick: Xử lý click (thay setOnClickListener)
  • @OnLongClick, @OnTouch, @OnCheckedChanged, v.v.
  • @BindString, @BindColor, @BindDimen: Bind resource

Bước 5: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Thay thế hiện đại: View Binding

Trong build.gradle (module):

android {
    buildFeatures {
        viewBinding true
    }
}

Sử dụng:

private ActivityMainBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
    
    binding.btnLoadText.setOnClickListener(v -> {
        binding.textView.setText("Xin chào!");
    });
}

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Nhấn nút "Tải văn bản" để xem ButterKnife hoạt động.

Cách sử dụng ButterKnife trong Android

Cách sử dụng ButterKnife trong Android