Home > android > Viewの幅と高さを取得する方法を考える

Viewの幅と高さを取得する方法を考える

Viewのwidthとheightを取得する方法を考えています。

取得するメソッドは以下。

View#getWidth();
View#getHeight();

これがウマく動かないのが以下のシチュエーション。

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
 
  setContentView(R.layout.main);
  LinearLayout ll = (LinearLayout) findViewById(R.id.main_layout);
 
  int width = ll.getWidth(); //この値が0になる
  int height = ll.getHeight(); //この値も0になる
}

onCreateメソッド内だけでなく、onStartやonResumeメソッドでも同じです。
まだ、コノ状態ではViewがレイアウトされていないのでしょうか?
どうすれば、Viewの幅や高さを取れるんでしょう?さまよってます。

解決案

レイアウトのXMLを放棄すれば何とかなりました。

private final static int FP = ViewGroup.LayoutParams.FILL_PARENT;
 
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
 
  LinearLayout ll = new LinearLayout(this) {
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
      int width = w; //これで幅が取得できる
      int height = h; //これで高さが取得できる
    }
  };
  ll.setLayoutParams(mkParams(FP, FP));
 
  setContentView(ll);
}
 
private ViewGroup.LayoutParams mkParams(int w, int h) {
  return new ViewGroup.LayoutParams(w, h);
}

プログラム的にViewを生成して、Viewのサイズ変更リスナで幅/高さを取得しています。
かなり不格好なコードですが、これで目的を達成できました。

日本Androidの会発足式典

「Android勉強会」の活動を継承・発展させて、恒常的なコミュニティとして、「日本Androidの会」が設立されます。
その記念式典が2008年9月12日に行われます。

開催日時:2008年9月12日(金) 19:00〜21:00(受付18:30〜)
- 開催場所:富士ソフト秋葉原ビル(Googleマップ)

プログラム:
  18:30〜19:00 受付
  19:00〜19:30 会則・役員・発足承認 役員挨拶
  19:30〜20:00 記念講演 Google社 Adrian Havill (エド・ハビル) 様
  20:00〜20:10 休憩
  20:10〜20:30 記念講演 早稲田大学大学院客員教授 丸山 不二夫様
  20:30〜21:00 ワーキンググループ紹介
  21:00 終了予定
申し込みは、こちらから。

http://www.android-group.jp/index.php?%B9%D6%B1%E9%2F%C8%AF%C2%AD%BC%B0%C5%B5

Googleの中の人が記念講演してくれるそうです。エドは日本語OKだそうです。
21時以降には懇親会があるかも?

席にもう少し空きがあるそうなので、興味のある方はお早めにお申し込み下さい。

関連のありそうなエントリ

Comments:2

egg 08-09-11 (木) 15:53

> まだ、コノ状態ではViewがレイアウトされていないのでしょうか?
> どうすれば、Viewの幅や高さを取れるんでしょう?さまよってます。

なんか、目に見える状態になる(View#onLayOutとかが呼ばれる)までは取れなさそうです。
Viewがレイアウトされてから、Activity#onWindowFocusChangedメソッドが呼ばれるみたいなので、ここで取るのはダメでしょうか。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus) {
・・・
width = ll.getWidth();
height = ll.getHeight();
}
}

adamrocker 08-09-11 (木) 22:44

>eggさん

コメントありがとうございます。
今回のようにサイズ変更が無い場合だとむしろonWindowFocusChangedの方が良さそうですね。
私の実装だと、Viewのサイズが動的に変更される場合はダメそうですしね…

でもメソッド名と機能が異なるのは気持ち悪いですね…

Comment Form
Remember personal info

*
To prove that you're not a bot, enter this code
Anti-Spam Image

Trackbacks:0

Trackback URL for this entry
http://www.adamrocker.com/blog/225/get_real_view_width_and_height.html/trackback/
Listed below are links to weblogs that reference
Viewの幅と高さを取得する方法を考える from throw Life

Home > android > Viewの幅と高さを取得する方法を考える

Search
Feeds
Meta

Return to page top