オブジェクトをご覧ください。サブクラスを作成することができます。既存のウィジェットやレイアウトを少し調整するだけで済む場合は、対象のウィジェットまたはレイアウトをサブクラス化して、そのメソッドをオーバーライドする方が簡単です。サブクラスを作成すると、画面要素の外観や機能をきめ細かく制御できます。カスタムビューを使用することで、以下のような機能を実現できます。タイプを作成できます。コントロール」のつまみを表示することができます。コンポーネントを組み合わせて、新しい単体のコンポーネントにまとめることができます。コントロール(左右のパネルのそれぞれにリストが付いていて、各リストアイテムを再配置できるもの)などを作成できます。チュートリアルでは、この手法を活用して、罫線付きのメモ帳を作成しています)。キー操作など、他のイベントをキャプチャして、独自の方法で処理することができます(ゲームなどに利用できます)。以下のセクションでは、カスタムビューを作成する方法と、それをアプリ内で利用する方法について説明します。クラスをご覧ください。コンポーネントの作成を開始する際に必要となる知識の概要をまとめると、次のようになります。クラスまたはサブクラスを、独自のクラスを使用して拡張します。スーパークラスの一部のメソッドをオーバーライドします。イベントをオーバーライドするのと同様です。新しい拡張クラスを使用します。完成した新しい拡張クラスは、ベースとなったビューの代わりとして使用できます。拡張クラスは、それを使用するアクティビティの内部クラスとして定義できます。ビューを作成した方が、アプリ内で幅広く利用できます)。コンポーネントを自由に作成できます。メーターや、カラオケで曲に合わせて歌を歌えるようにボールがバウンドしながら歌詞の間を移動するテキストビューなどを作成できます。コンポーネントだけでは、どのように組み合わせても実現できません。ワークステーションよりも大幅に処理能力が低い環境である点に注意が必要です)。コンポーネントを作成することから開始します。メーターの色や範囲、針の幅や減衰度などを指定できます)。クラス内に組み込みます。オーバーライドする必要があります。このサイズが希望のサイズであることはあまりありません。メソッドをオーバーライドすることもできます。コンポーネント、スタイル付きテキストなど、必要なものをすべて実装できます。グラフィックは除きます。拡張して、別のスレッドから描画する必要があります。サンプルをご覧ください。場合はもう少し複雑です。コントラクトにとって欠かせない要素です。オーバーライドする必要があります。メソッドを呼び出す要件(計算された測定幅と測定高さを指定します)があるため、もう少し複雑になります。メソッドからこのメソッドを呼び出さないと、測定時に例外が発生します。実装方法の概要をまとめると、次のようになります。どちらもサイズを示す整数のコード)を指定します。この仕様は、生成する幅と高さの測定値に対する制限の要件として扱われます。ドキュメントでは、測定処理全体についても詳しく説明しています)。メソッドで、コンポーネントのレンダリングに必要になる幅と高さの測定値を計算します。このメソッドは通常、渡された仕様の範囲内に収めようとする処理を行いますが、仕様の超過を許可することもできます(その場合、親は、クリッピング、スクロール、例外のスローなど、処理方法を選択できます。求めることもできます)。メソッドを呼び出す必要があります。しないと、例外がスローされます。フレームワークがビューに対して呼び出す他の標準的メソッドの概要は以下のとおりです。ファイルからインフレートされるときに呼び出される形式のコンストラクタがあります。ファイル内で定義されているすべての属性を解析して適用します。インフレートされたときに呼び出されます。このビューとそのすべての子のサイズ要件を指定する際に呼び出されます。このビューが自身のすべての子に対してサイズと位置を割り当てる必要があるときに呼び出されます。このビューのサイズが変更されたときに呼び出されます。このビューが自身のコンテンツをレンダリングする必要があるときに呼び出されます。新しいキーイベントが発生したときに呼び出されます。イベントが発生したときに呼び出されます。イベントが発生したときに呼び出されます。イベントが発生したときに呼び出されます。ビューがフォーカスを取得したときや失ったときに呼び出されます。ビューを格納しているウィンドウがフォーカスを取得したときや失ったときに呼び出されます。ビューがウィンドウにアタッチされたときに呼び出されます。ビューがウィンドウからデタッチされたときに呼び出されます。ビューを格納しているウィンドウの表示設定が変化したときに呼び出されます。コンポーネントを作成するのではなく、既存のコントロールを集めて再利用可能なコンポーネントを作成したい場合は、複合コンポーネント(複合コントロール)の作成で済むことがあります。複合コンポーネントとは、簡単に説明すると、比較的基本的なコントロール(またはビュー)をいくつか集めてアイテムの論理グループを構成し、単体として扱えるようにする仕組みです。付きのボタンを組み合わせたものと考えることができます。入力することもできます。利用する方が簡単ですが、概念としては、上記のコンボボックスの例の方がわかりやすいでしょう。複合コンポーネントを作成するには:通常はなんらかのタイプのレイアウトを出発点にして、レイアウトを拡張するクラスを作成します。他のレイアウトを内部にネストすることもできます。そのため、複合コンポーネントの構造はいくらでも複雑にすることができます。ベースの宣言を通じて内部コンポーネントを作成することも、コードを通じてプログラムによってネストすることもできます。コンストラクタに渡します。次に、新しいコンポーネントの内部で使用する他のビューをセットアップします。導入し、コンストラクタで抽出して使用することもできます。内部ビューが生成するイベントのリスナーを作成することもできます。内容を更新することができます。アクセサや修飾子を使用して独自のプロパティを作成することもできます。値を設定しておいて、必要に応じてそのコンテンツを照会することができます。メソッドをオーバーライドする必要はありません。レイアウトは通常、デフォルト動作で適切に機能します。必要に応じてオーバーライドすることもできます。メソッドをオーバーライドすることもできます。リストから特定のデフォルト値が選択されるように設定できます。コントロールのベースとしてレイアウトを使用することで、以下のようなメリットを得ることができます。ファイルを使用してレイアウトを指定することも、コードを通じてプログラムによってビューを作成し、レイアウト内にネストすることもできます。メソッド)は通常、デフォルトで適切な動作が設定されているため、オーバーライドする必要はありません。このようにして、複雑な複合ビューを簡単に作成し、単体のコンポーネントのように再利用することができます。タイプを編集する場合によっては、さらに簡単な方法でカスタムビューを作成することができます。必要とする機能と似た機能を備えたコンポーネントがすでに存在している場合、そのコンポーネントを拡張し、変更したい動作をオーバーライドするだけで済みます。コンポーネントの場合と同様の設定が可能な一方、ビュー階層の中で用途が特化しているクラスをベースに作業を開始することで、労力をかけることなく、必要な動作をそのまま流用することができます。プラットフォームの活用方法を示しています。ビューを拡張することで、罫線付きのメモ帳を作成しています。変更される可能性もありますが、基本的な原則は参考になるはずです。サンプルをインポートしていない場合は、インポートしてください(上記のリンクからソースを参照するだけでも構いません)。このファイルの主なポイントは以下のとおりです。定義このクラスは次の行で定義されています。アクティビティの内部クラスとして定義されています。してアクセスすることができます。親クラスからのデータアクセスを許可する「合成メソッド」は生成しません。強い関連性はなく、実際には独立したクラスとして動作することになります。外部クラスからステートにアクセスする必要がない場合には、この方法によって、シンプルに内部クラスを作成できます。生成されるクラスも小さくなり、他のクラスからも簡単に利用することができます。EditText(上記の例でカスタマイズ対象として選択されているビュー)を拡張します。ビューの代わりとして利用できます。通常どおり、先にスーパークラスを呼び出します。コンストラクタではなく、パラメータ化コンストラクタです。ファイルからインフレートされるときに、このパラメータを使用して作成されます。コンストラクタに渡す処理の両方を行う必要があります。コンポーネントを作成する場合は、必要に応じて他のメソッドもオーバーライドします。メソッドに渡されます)。メソッドが呼び出されています。メソッドは、呼び出す必要があります。上記の例の場合、追加する線を描画した後に最後に呼び出しています。コンポーネントを作成した後は、その使用方法を指定する必要があります。コンポーネントを使用しています。内で汎用ビューとして作成されており、そのクラスはフルパッケージを使用して指定されています。いう表記を使用して参照されています。プログラミング言語において、内部クラスを参照する際の標準的な方法です。