うさがにっき

読書感想文とプログラムのこと書いてきます

ButterKnife + ButterKnifeZeleznyを使いviewごとのfindviewbyidを排除する

概要

ButterKnifeライブラリとButterKnifeZeleznyプラグインを使いfindviewbyidを入力する手間をなくす

詳細

ButterKnife

ButterKnifeはfindViewByIdをソースから排除できるツール
このようなViewの指定ができるようになる

  @InjectView(R.id.user) EditText username;
  @InjectView(R.id.pass) EditText password;
   
  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.inject(this);
    // TODO Use "injected" views...
  }

アノテーションを使うことにより、findViewByIdなどのキャストを気にすることがなくなる

導入方法

プロジェクトを右クリックし、Open Module Settingを開く
f:id:tiro105:20150224161734p:plain
Dependiesタブを開き、下の+ボタンを押下
f:id:tiro105:20150224162108p:plain
1 Library dependencyを選択すると、Choose Library Dependencyウィンドウが開くので、ここでbutterknifeで検索。
f:id:tiro105:20150224162124p:plain

これでButterKnifeライブラリの導入はOK

ButterKnifeZelezny

ButterKnifeの導入によりfindViewByIdをソースの外に追い出すことができた
だが、できればjavaファイルへ自動的にxmlからidを引っ張ってきてViewオブジェクトを作って欲しい・・・!
そんな願いを叶えてくれるのがButterKnifeZeleznyプラグイン

導入方法

AndroidStudio > Preference
f:id:tiro105:20150224162852p:plain
Pluginsを選択しBrows Repositories...を押下
f:id:tiro105:20150224162914p:plain
butterknifeくらいまで入力すればでてくる
f:id:tiro105:20150224163035p:plain
install後、AndroidStudioを再起動を促されるので再起動

使い方

適当なレイアウトxmlファイルをついくる(各widgetにidはつけておく)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text_view"
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <RadioButton
        android:id="@+id/radioButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New RadioButton"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

javaファイルに戻り、setContentViewでCommand + Nを押下
f:id:tiro105:20150224163316p:plain
Generate ButterKnife Injectionsを選択
f:id:tiro105:20150224163355p:plain

自動的にwidget一覧がクラスに追加される!

    @InjectView(R.id.text_view)
    TextView textView;
    @InjectView(R.id.button)
    Button button;
    @InjectView(R.id.radioButton)
    RadioButton radioButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
    }

これはViewが多くなってくると重宝しそう

参考


[Android]ButterKnife の View Injection コードを一発自動生成するプラグイン『ButterKnifeZelezny』 | Developers.IO