Androidカスタムコンポーネントのススメ

はじめに
Androidアプリケーションの機能実装のアプローチとして、コンポーネント(Component / Control、Widgetと称すこともあります)を拡張していく方法があります。特にコンポーネントの振る舞いに紐づく機能は、それをActivityクラスに実装するよりコンポーネントに実装する方が、全体的にシンプルなコードになることがあります。
例として、必須入力チェック機能付きEditTextコンポーネントを作成してみます。
※いつもの如くeclipseは英語版のままなので、適宜日本語に置き換えてください

開発手順

Androidプロジェクトを作成します。プロジェクト名は「CustomComponent」、パッケージ名は「jp.tworks.android.customcomponent」としました。パッケージ名は後に使いますので覚えておきましょう。

EditTextに必須入力チェック機能を付けるために、必要な属性を考えてみます。EditTextが必須チェックを行うか否かのフラグ(boolean)と必須チェックエラーを検出したときのエラーメッセージ(String)があれば良さそうですね。

さっそく属性を定義します。/res/values/attrs.xml を追加します。
/res/values からコンテキストメニューを開き、[New] –> [Other...] を選択します。

Android XML Values Fileを選択します。

ファイル名に「attrs.xml」を入力したらFinishをクリックします。

attrs.xmlを以下のように編集します。

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<resources>
 
<declare-styleable name="ValidEditText">
<attr name="required" format="boolean" />
<attr name="required_message" format="string" />
</declare-styleable>
 
</resources>

declare-styleable name=”xxxxxxxx” のxxxxxxxxは、これから作成するカスタムコンポーネントのクラス名を指定しておきましょう。

次にカスタムコンポーネントのクラスを作成します。プロジェクトにクラスを追加します。srcからコンテキストメニューを開き「New」–>「Class」をクリックします。

Package名を「jp.tworks.android.customcomponent.widget」、クラス名を「ValidEditText」、継承元クラスをAndroid標準の「android.widget.EditText」としました。

ValidEditTextクラスのコンストラクタを定義しましょう。widgetには3タイプのコンストラクタがありますが、ここではそのうちの1つ(引数が2つのバージョン)を定義します。

1
2
3
4
5
6
7
public class ValidEditText extends EditText {
 
public ValidEditText(Context [...]

Tagged