EntryNavi : « EULAを比較的簡単に表示するクラス | メイン | Androidで範囲を選択する為のSeekBar的なカスタムビュー「RangeSelectBar」をつくってみた。 »

CategoryNavi : メイン -> コンピューター -> 開発 -> Java(Android)

カスタムビューでxmlのレイアウトを適用する方法

この技は本当にいるのかよくわからないです。
本当に自分が忘れないためのメモです、スミマセン。


ViewGroupを継承したクラスである必要があります。



private int _widthMeasureSpec = 0;
private int _heightMeasureSpec = 0;


@Override
protected void onLayout(boolean changed, int left, int top, int right,
		int bottom) {

	ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(
				ViewGroup.LayoutParams.FILL_PARENT
				, ViewGroup.LayoutParams.FILL_PARENT);
	
	//inflaterを使ってxmlのレイアウトをViewに反映する
	LayoutInflater inflater = (LayoutInflater)getContext()
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	View v = inflater.inflate(R.layout.layout, null);
	addViewInLayout(v, -1, lp);

	//子要素に必要な大きさを計測させる
	int padding = 0;
	int childWidthSpec = ViewGroup.getChildMeasureSpec(_widthMeasureSpec, padding * 2, lp.width);
	int childHeightSpec = ViewGroup.getChildMeasureSpec(_heightMeasureSpec, padding * 2, lp.height);
	v.measure(childWidthSpec, childHeightSpec);

	//子要素の描画範囲でレイアウトを作成する
	v.layout(padding, padding, padding + v.getMeasuredWidth(), padding + v.getMeasuredHeight());

}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
	super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	_widthMeasureSpec = widthMeasureSpec;
	_heightMeasureSpec = heightMeasureSpec;
}

<Category : Java(Android)>

コメント (1)

pop:

これがやりたくて2日間悩んでました。
この方法でバッチリでした!
ありがとうございます!

コメントを投稿

検索

Google

サイドフィード

track feed 理ろぐ
人気ブログランキング - 理ろぐ
Powered by
Movable Type 3.34