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作成の基本だ
コメント
コメントを投稿