- 2008-09-10 23:52
- android
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の会」が設立されます。
その記念式典が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のサイズが動的に変更される場合はダメそうですしね…でもメソッド名と機能が異なるのは気持ち悪いですね…
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
