2013-12-20 10 views
5

私はオリエンテーションの設定chnageオリエンテーションの変更時に高さ/幅の値が正しく表示されませんか?

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     int height = displaymetrics.heightPixels; 
     int width = displaymetrics.widthPixels; 

     Log.i(TAG, "onConfigurationChanged: "+newConfig.orientation+", "+height+", "+width + ", "+mTempeFrameLayout.getWidth()); 
    } 

のビューの高さと幅の値を読み取るためにonConfigurationChnage(..)を実施したが向きが、それは最後の向き(たぶん)の値を与えた変更得れば、それは常に、古い値を返信します。

画面の幅/高さを使用してdisplaymetricsが正しく来ていますが、どのビューでも同じことが正しく機能していません。

どのようなアイデアを持っています...どのように方向変更に正しい値を得ることができますか?

+0

のために働いていなかったため

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { configHome(); view.getViewTreeObserver().removeGlobalOnLayoutListener(this); } }); } } 

を使用していた:) – CoDe

答えて

12

getWidth()は、ビューが配置されるときの幅を返します。つまり、画面に描画されるまで待つ必要があります。新しい設定のためにビューを再描画する前にonConfigurationChangedが呼び出されているので、後で変更するまで新しい幅を取得できないと思います。

@Override 
public void onConfigurationChanged(Configuration newConfiguration) { 
    super.onConfigurationChanged(newConfiguration); 
    final View view = findViewById(R.id.scrollview); 

    ViewTreeObserver observer = view.getViewTreeObserver(); 
    observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

     @Override 
     public void onGlobalLayout() { 
      Log.v(TAG, 
        String.format("new width=%d; new height=%d", view.getWidth(), 
          view.getHeight())); 
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     } 
    }); 
} 
+0

それが働きました。.. ..? –

+0

ありがとうございます:) – CoDe

0

私は上記の答えは私のここでのNitesh回答作業dear..but働いていないSanket990 @

関連する問題