Android:ViewのSizeをレイアウトに頼らない・・・onMeasure
Viewのサイズをレイアウトに頼りたくない時、レイアウトに頼れない時、
そんなときはonMeasureをオーバーライドしやがれ。
下記はButtonのサイズを100x100にするサンプル
次は、親のレイアウト指定がWRAP_CONTENTだったら自分のサイズを主張する現実的なサンプル。
カスタムView作成の基本だ
そんなときはonMeasureをオーバーライドしやがれ。
下記はButtonのサイズを100x100にするサンプル
Button btn = new Button( context ) {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// このようにして自身のサイズをコントロールできるぞ
setMeasuredDimension( 100 , 100 );
}
};
次は、親のレイアウト指定がWRAP_CONTENTだったら自分のサイズを主張する現実的なサンプル。
Button btn = new Button( context ) {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
float density = getResources().getDisplayMetrics().density;
int hmode = MeasureSpec.getMode(heightMeasureSpec);
int wmode = MeasureSpec.getMode(widthMeasureSpec);
int hsize = MeasureSpec.getSize(heightMeasureSpec);
int wsize = MeasureSpec.getSize(widthMeasureSpec);
// 高さを求める
int height = 0;
if( hmode==MeasureSpec.EXACTLY ) {
height = hsize;
} else {
height = (int)( 300f * density );
}
// 幅を求める
int width = 0;
if( wmode==MeasureSpec.EXACTLY ) {
width = wsize;
} else {
width = (int)( 300 * density );
}
setMeasuredDimension( width , height );
}
}
カスタムView作成の基本だ
コメント
コメントを投稿