0
如我在stackoverflow线程中所建议的那样,我使用ViewTreeObserver等待第一个布局,以便我可以测量我的tablelayout的宽度和高度(这是我的xml中的唯一元素,宽度和高度被设置为与父母匹配)。然而,我只得到0.(代码放在OnCreate中setContentView之后立即调用的方法内)使用ViewTreeObserver等待第一个布局不起作用
我尝试使用getMeasuredWidth/getMeasuredHeight的目的是为了避免使用度量方法(因为有开销以确定状态栏,导航栏等)
mysquare = (TableLayout) findViewById(R.id.square);
ViewTreeObserver viewTreeObserver = mysquare.getViewTreeObserver();
if (viewTreeObserver.isAlive())
{
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
if(Build.VERSION.SDK_INT >= 16)
mysquare.getViewTreeObserver().removeOnGlobalLayoutListener(this);
else
mysquare.getViewTreeObserver().removeGlobalOnLayoutListener(this);
screen_width = mysquare.getMeasuredWidth();
screen_height = mysquare.getMeasuredHeight();
}
});
}
如果使用下面(getMeasuredWidth/getMeasuredHeight给出内部gameSelectionLayout中使用了延迟的执行的方法),然后我得到正确的值的高度,提供的延迟值是适合特定设备。这很容易导致某些设备再次变为'0'。我该怎么办?通过Google Helpouts
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
gameSelectionLayout();
}
}, 100);