のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

AndroidのカスタムViewでOnMeasure関数のwidthMeasureSpecがマイナス

カスタムViewを表示すると、画面いっぱいに描画されてしまい、
ボタンやテキストなどが表示できない。
OnMesure関数を追加して、
setMeasuredDimension(800, 600);
と固定の値を書くと、うまくいくようになるが、
回転すると、800,600に固定したため、
画面いっぱいに書いてくれなくなる。

OnMeasure関数のwidthMeasureSpec変数をしらべると

  • 2147483648=0xFFFFFFFF80000000

の値が入ってくる。

どう扱えばいいんだろ・・・

API Demoにサンプルがあった。
http://bit.ly/atLKgp

  @Override
    protected void onMeasure(
 int widthMeasureSpec,
 int heightMeasureSpec) 
{
   setMeasuredDimension(
      measureWidth(widthMeasureSpec),
      measureHeight(heightMeasureSpec));
}

private int measureHeight(int measureSpec) {
        int result = 0;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);

略