2012-02-07 5 views
0

私には問題があり、それについて何をすべきか分かりません。 Androidで開発するのは初めてですが、Javaの経験があります。アクティビティの構築中に幅を取得する

onCreate(バンドル)、onPostCreate(バンドル)、または他の同様のメソッドでは、正しいビューの幅を取得できません。それは0を返します。私はまた、デバッグ目的のための簡単なボタンを作って、そのボタンは正しい値を返します。

どのようにしてonCreateメソッドの後にViewの幅を取得するメソッドを呼び出すのですか? それができない場合、回避策は何ですか?事前に

おかげで、

Gerraltは

答えて

2

問題は、アクティビティを開始するとすぐに幅を調べようとしているためです。 しかし、この位置では、ビューの実際の変換は行われませんでした。 Androidでは、個々のビューの幅と高さを特定するための特別なコールバックが用意されています。これにアクセスするには、onWindowFoucsChanged()メソッドをオーバーライドする必要があります。ここではサンプルは、この行textview.getMeasuredWidth()は、実行時のTextViewの実際の幅を見つけるために、あなたを助け、

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
    // TODO Auto-generated method stub 
    super.onWindowFocusChanged(hasFocus); 
    System.out.println("...Height..."+textview.getMeasuredWidth()); 
} 

です。同様に、このメソッドを使用して任意のビューの幅と高さを見つけることができます。

+0

どうもありがとう!これは私が必要なものです! – Gerralt

0

私は考えているように、あなたがのonCreate(バンドル)メソッドでは、次のとおりです。

public void onCreate(Bundle xxx) { 
    super(xxx); 

    // init some stuff here 

    setContentView(R.layout.my_layout); 

    // from THIS point you can get sizes of Views 
} 

私が間違っている場合は申し訳ありませんが、私のプロジェクト、それに働くOK、私は頻繁に カスタムビューを使用し、私の活動コードではなく、ビューコードでサイズを使用すると言う必要があります。

0

これがonWindowFocusChangedされます()は、このような:

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 
      if(hasFocus && llfullscreen!=null){ 
     int layoutHeight = llfullscreen.getHeight(); 
       ViewGroup.LayoutParams params = lv.getLayoutParams(); 
     params.height = lv/2; //Set to half the screens size 
     this.lv.setLayoutParams(params); 
     this.lv.invalidate(); 
      } 
    } 
関連する問題