カスタム ビューを作成したいと思います (私はそれをと呼びますMyComplexView) 。RelativeLayoutImageviewTextViewButton
レイアウトで xml を宣言してから、クラスを作成したいと思います。
MyComplexView extends RelativeLayout{...}
しかし、どのレイアウトをインフレートする必要があるかを示すために何をオーバーライドする必要があるのか わかりません。
これどうやってするの?ありがとう
このようなもの:
スーパークラスからコンストラクターを追加します。(コンテキストのみのものはプログラムでビューを作成するためのもので、その他は XML でビューを追加するためのものです。
init()たとえばと呼ばれるメソッドを作成し、各コンストラクターから呼び出します。
init メソッド内で次のことを行います。
LayoutInflater.from(context).inflate(R.layout.my_view_layout, this, true);
inflate では、追加のパラメーターは実際には次のことを意味します。
true -> レイアウトをケースの相対レイアウトのルートにアタッチします (プロのヒント: xml 内で、レイアウト ルートが相対レイアウトでもある場合はタグをマージし、それらをコードで整列して、階層がより単純になるようにすることができます) または任意の好きなレイアウト。
this ->拡張したビューを拡張する相対レイアウトの場合にアタッチするレイアウト。
自動的にルートにアタッチされます -> RelativeLayout を拡張します。
次に、次のように findViewById を使用できます。
this.findViewById(R.id.myView);
あなたの主な目標が何であるか 100% 確信が持てないので、徹底するように努めます。
複雑なレイアウトを他のレイアウトに含めたい場合は、単純に を定義my_complext_layout.xmlして、他のレイアウトに次のように配置できます。
<include layout="@layout/my_complext_layout" />
独自のコードを実行する必要がある場合は、このレイアウトのルートを にするだけでMyComplexView、ビューの作成時にコードを実行できます。
コードをレイアウトで操作できるようにする場合は、ビュー コンストラクターで を実装OnGlobalLayoutListenerしてレイアウトに追加するだけです。
のコンストラクターを実装しMyComplexViewます。
public MyComplexView(Context context, AttributeSet attrs){
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.header_view, this, true);
mHeaderView = (TextView)findViewById(R.id.header);
if(mHeaderView != null)
mHeaderView.setText("Test");
}
開発者ドキュメントのカスタム コンポーネントを参照してください。特に複合コントロールセクション。
Java ファイルを作成したら、それを xml で参照するには、完全修飾パッケージ名を使用する必要があります。
<com.yourpackage.YourCustomView
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
通常、カスタム ビューの作成は、まだ存在しないウィジェットを作成することを目的としています。あなたがしようとしているのは、同じレイアウトを複数の場所で繰り返すことです。
コンテキストに応じて、それを行うためのいくつかのオプションがあります。
レイアウトをレストに配置する場合は、レイアウトを別のファイルに作成し、それを ListAdapter で使用します。これについては、ListView チュートリアルをご覧ください。
このレイアウトが複数のアクティビティに組み込まれる一般的なレイアウトである場合は、代わりに Fragment を使用してみてください。フラグメントは、独自のビューを持つアクティビティのサブパーツです。または、タグを使用して複数の xml にレイアウトを埋め込むこともできます。
カスタム クラスと単一のウィジェットが本当に必要な場合は、View クラスを拡張する必要があります。レイアウトを拡張するということは、子ウィジェットを別の方法で編成したくないということです (たとえば、円で編成するなど)。ビューを拡張すると、必要なもの (ボタン、画像、テキスト) を常に同じ方法で整理できます。しかし、私はあなたに嘘をつきません。これは多くの仕事を意味します。