2012-07-11 14 views

回答

1

所以我一直在做這樣的事情 - 我不知道它是理想的,但它工作得很好 - 使用ViewTreeObserver.OnGlobalLayoutListener。事情是這樣的:

View myView = findViewById(R.id.myview); 
ViewTreeObserver observer = myView.getViewTreeObserver(); 
observer.addOnGlobalLayoutListener(new SquareLayoutAdjuster()); 

class SquareLayoutAdjuster 
     implements ViewTreeObserver.OnGlobalLayoutListener { 
    @Override 
    public void onGlobalLayout() { 
     int dimension = myView.getHeight(); 
     LayoutParams params = myView.getLayoutParams(); 
     params.width = dimension; 
     myView.setLayoutParams(params); 
     observer.removeGlobalOnLayoutListener(this); 
    } 
} 

這只是一般的想法,我不知道,如果它編譯原樣,但基本上在onGlobalLayout()方法,你的意見,保證測量。在結尾刪除偵聽器,以防止它被多次調用(除非你需要這樣的事情發生無論出於何種原因)。

0

KCOPPOCK的解決方案適用於我,謝謝。但我得到了「java.lang.IllegalStateException:這ViewTreeObserver是不是活的,叫getViewTreeObserver()再次」在運行時。所以我用 findViewById(R.id.serie_main_layout).getViewTreeObserver().removeOnGlobalLayoutListener(this);

代替

observer.removeGlobalOnLayoutListener(this); 

和所有完美的作品。

相關問題