2013-12-20 97 views
5

我實現onConfigurationChnage(..)來讀取方向配置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()); 
    } 

視圖的高度和寬度的價值,但它總是回覆舊值,如果方向得到改變了過去的方向(大概)值。

屏幕寬度/高度使用displaymetrics來對了,但同樣不適用於任何視圖。

任何人都有想法..如何獲得正確的價值取向改變?

+0

工作@ Sanket990不dear..but Nitesh答案在這裏工作的工作:) – 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

我不得不使用

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

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

    } 
} 

,因爲上面的回答是不適合我