Suche…


Einführung

Butterknife ist ein Ansichtsbindungswerkzeug, das Anmerkungen verwendet, um Boilerplate-Code für uns zu generieren. Dieses Tool wurde von Jake Wharton at Square entwickelt und dient im Wesentlichen zum Speichern von sich wiederholenden Codezeilen wie findViewById(R.id.view) beim Umgang mit Ansichten.

Um klar zu sein, Butterknife ist keine Abhängigkeitsinjektionsbibliothek . Butterknife injiziert Code zur Kompilierzeit. Es ist der Arbeit von Android Annotations sehr ähnlich.

Bemerkungen

Buttermesser

Feld- und Methodenbindung für Android-Ansichten, in denen Anmerkungsverarbeitung verwendet wird, um für Sie Boilerplate-Code zu generieren.

  • Beseitigen Sie die Aufrufe von findViewById mithilfe von @BindView für Felder.
  • Gruppieren Sie mehrere Ansichten in einer Liste oder einem Array. Sie können alle Aktionen gleichzeitig mit Aktionen, Setters oder Eigenschaften ausführen.
  • Beseitigen Sie anonyme Innenklassen für Zuhörer, indem Sie Methoden mit @OnClick und anderen kommentieren.
  • Beseitigen Sie Ressourcensuchen, indem Sie Ressourcennotizen für Felder verwenden.

Weitere Informationen: http://jakewharton.github.io/butterknife/

Lizenz

Copyright 2013 Jake Wharton

Lizenziert unter der Apache-Lizenz, Version 2.0 (die "Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Sie erhalten eine Kopie der Lizenz unter

http://www.apache.org/licenses/LICENSE-2.0

Soweit nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die unter der Lizenz vertriebene Software "WIE BESEHEN", OHNE GARANTIEN ODER BEDINGUNGEN jeglicher Art, weder ausdrücklich noch stillschweigend, vertrieben. In der Lizenz finden Sie die Sprache, in der die Berechtigungen und Einschränkungen der Lizenz geregelt sind.

ButterKnife in Ihrem Projekt konfigurieren

Konfigurieren Sie Ihr build.gradle auf build.gradle , um das build.gradle für android-apt :

buildscript {
   repositories {
      mavenCentral()
   }

   dependencies {
      classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
   }
}

build.gradle dann das android-apt Plugin in Ihrem build.gradle auf build.gradle und fügen Sie die ButterKnife-Abhängigkeiten hinzu:

apply plugin: 'android-apt'

android {
    ...
}

dependencies {
      compile 'com.jakewharton:butterknife:8.5.1'
      annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}

Hinweis: Wenn Sie den neuen Jack-Compiler mit Version 2.2.0 oder neuer verwenden, benötigen Sie das android-apt und können stattdessen apt durch annotationProcessor ersetzen, wenn Sie die Compilerabhängigkeit deklarieren.

Um ButterKnife-Anmerkungen zu verwenden, sollten Sie nicht vergessen, sie in onCreate() Ihrer Aktivitäten oder onCreateView() Ihrer Fragmente zu onCreateView() :

class ExampleActivity extends Activity {

    @Override 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Binding annotations
        ButterKnife.bind(this);
        // ...
  }

}

// Or
class ExampleFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(getContentView(), container, false);
        // Binding annotations
        ButterKnife.bind(this, view);
        // ...
        return view;
  }

}

Snapshots der Entwicklungsversion sind im Sonatype-Repository für Snapshots verfügbar.


Nachfolgend finden Sie die zusätzlichen Schritte, die Sie ausführen müssen, um ButterKnife in einem Bibliotheksprojekt zu verwenden

Um ButterKnife in einem Bibliotheksprojekt zu verwenden, fügen Sie das Plugin zu Ihrem build.gradle auf Projektebene build.gradle :

buildscript {
    dependencies {
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
    }
}

… Und bewerben Sie sich dann auf Ihr Modul, indem Sie diese Zeilen oben in build.gradle Bibliotheksebene build.gradle :

apply plugin: 'com.android.library'
// ...
apply plugin: 'com.jakewharton.butterknife'

Stellen Sie jetzt sicher, dass Sie in allen ButterKnife-Anmerkungen R2 anstelle von R verwenden.

class ExampleActivity extends Activity {

    // Bind xml resource to their View 
    @BindView(R2.id.user) EditText username;
    @BindView(R2.id.pass) EditText password;

    // Binding resources from drawable,strings,dimens,colors
    @BindString(R.string.choose) String choose;
    @BindDrawable(R.drawable.send) Drawable send;
    @BindColor(R.color.cyan) int cyan;
    @BindDimen(R.dimen.margin) Float generalMargin;

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

    // bind with butterknife in onCreate
    @Override 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        // TODO continue
  }

}

Bindungsansichten mit ButterKnife

Wir können Felder mit @BindView und einer Ansichts-ID für Butter Knife kommentieren, um die entsprechende Ansicht in unserem Layout zu suchen und automatisch @BindView .

Verbindliche Ansichten

Ansichten in Aktivität binden

class ExampleActivity extends Activity {
  @BindView(R.id.title) TextView title;
  @BindView(R.id.subtitle) TextView subtitle;
  @BindView(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // TODO Use fields...
  }
}

Verbindliche Ansichten in Fragmenten

public class FancyFragment extends Fragment {
  @BindView(R.id.button1) Button button1;
  @BindView(R.id.button2) Button button2;
  private Unbinder unbinder;

  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    unbinder = ButterKnife.bind(this, view);
    // TODO Use fields...
    return view;
  }
  
  // in fragments or non activity bindings we need to unbind the binding when view is about to be destroyed
  @Override
    public void onDestroy() {
        super.onDestroy();
        unbinder.unbind();
    }
}

Bindungsansichten in Dialogen

Wir können ButterKnife.findById , um Ansichten zu einer Ansicht, Aktivität oder einem Dialog zu suchen. Es verwendet Generika, um auf den Rückgabetyp zu schließen, und führt automatisch die Umwandlung durch.

View view = LayoutInflater.from(context).inflate(R.layout.thing, null);
TextView firstName = ButterKnife.findById(view, R.id.first_name);
TextView lastName = ButterKnife.findById(view, R.id.last_name);
ImageView photo = ButterKnife.findById(view, R.id.photo);

Bindungsansichten in ViewHolder

static class ViewHolder {
    @BindView(R.id.title) TextView name;
    @BindView(R.id.job_title) TextView jobTitle;

    public ViewHolder(View view) {
      ButterKnife.bind(this, view);
    }
  }

Bindungsressourcen

Abgesehen davon , dass die für Ansichten zu binden, könnte man auch Buttermesser verwenden , um Ressourcen zu binden , wie diejenigen , die innerhalb strings.xml , drawables.xml , colors.xml , dimens.xml usw.

public class ExampleActivity extends Activity {

    @BindString(R.string.title) String title;
    @BindDrawable(R.drawable.graphic) Drawable graphic;
    @BindColor(R.color.red) int red; // int or ColorStateList field
    @BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field

    @Override
    public void onCreate(Bundle savedInstanceState) {
     
        // ...

        ButterKnife.bind(this);
    }

}

Bindungslisten

Sie können mehrere Ansichten in einer Liste oder einem Array zusammenfassen. Dies ist sehr hilfreich, wenn eine Aktion für mehrere Ansichten gleichzeitig ausgeführt werden muss.

@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;

//The apply method allows you to act on all the views in a list at once.
ButterKnife.apply(nameViews, DISABLE);
ButterKnife.apply(nameViews, ENABLED, false);


//We can use Action and Setter interfaces allow specifying simple behavior.
static final ButterKnife.Action<View> DISABLE = new ButterKnife.Action<View>() {
  @Override public void apply(View view, int index) {
    view.setEnabled(false);
  }
};
static final ButterKnife.Setter<View, Boolean> ENABLED = new ButterKnife.Setter<View, Boolean>() {
  @Override public void set(View view, Boolean value, int index) {
    view.setEnabled(value);
  }
};

Optionale Bindungen

Standardmäßig sind sowohl @Bind als auch Listener-Bindungen erforderlich. Eine Ausnahme wird ausgelöst, wenn die Zielansicht nicht gefunden werden kann. Wenn wir jedoch nicht sicher sind, ob eine Ansicht vorhanden ist oder nicht, können wir den Feldern eine @Nullable Annotation oder den @Optional Annotation Methoden hinzufügen, um dieses Verhalten zu unterdrücken und eine optionale Bindung zu erstellen.

@Nullable 
@BindView(R.id.might_not_be_there) TextView mightNotBeThere;

@Optional 
@OnClick(R.id.maybe_missing) 
void onMaybeMissingClicked() {
  // TODO ...
}

Binden von Hörern mit ButterKnife

OnClick Listener:

@OnClick(R.id.login)
public void login(View view) {
  // Additional logic
}

Alle Argumente für die Listener-Methode sind optional:

@OnClick(R.id.login)
public void login() {
   // Additional logic
}

Spezieller Typ wird automatisch gegossen:

@OnClick(R.id.submit)
public void sayHi(Button button) {
  button.setText("Hello!");
}

Mehrere IDs in einer einzigen Bindung für die Behandlung allgemeiner Ereignisse:

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

Benutzerdefinierte Ansichten können an ihre eigenen Listener gebunden werden, indem keine ID angegeben wird:

public class CustomButton extends Button {
  @OnClick
  public void onClick() {
    // TODO 
  }
}

Unverbaubare Ansichten in ButterKnife

Fragmente haben einen anderen Ansichtslebenszyklus als Aktivitäten. Setzen Sie beim Binden eines Fragments in onCreateView die Ansichten in onDestroyView auf null. Butter Knife gibt eine Unbinder-Instanz zurück, wenn Sie bind aufrufen, um dies für Sie auszuführen. Rufen Sie seine Unbind-Methode im entsprechenden Lifecycle-Callback auf.

Ein Beispiel:

public class MyFragment extends Fragment {
  @BindView(R.id.textView) TextView textView;
  @BindView(R.id.button) Button button;
  private Unbinder unbinder;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.my_fragment, container, false);
    unbinder = ButterKnife.bind(this, view);
    // TODO Use fields...
    return view;
  }

  @Override public void onDestroyView() {
    super.onDestroyView();
    unbinder.unbind();
  }
}

Hinweis: Das Aufrufen von unbind () in onDestroyView () ist nicht erforderlich, wird jedoch empfohlen, da es viel Speicherplatz spart, wenn Ihre App einen großen Backstack hat.

Android Studio ButterKnife Plugin

Android ButterKnife Zelezny

Plugin zum Erzeugen von ButterKnife-Injektionen aus ausgewählten Layout-XMLs in Aktivitäten / Fragmenten / Adaptern.

Hinweis: Stellen Sie sicher, dass Sie mit der rechten Maustaste auf your_xml_layou (R.layout.your_xml_layou ) (R.layout.your_xml_layou andernfalls enthält das Menü Generate keine Butterknife-Injektoroption.

Geben Sie hier die Bildbeschreibung ein

Link: Jetbrains Plugin Android ButterKnife Zelezny



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow