在Android中获取布局的宽度/高度

may*_*hem 9 android android-layout

我想知道如何测量视图的尺寸.就我而言,它是绝对布局.我已经阅读了有关这些问题的答案,但我仍然没有得到它.

这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);      

    AbsoluteLayout layoutbase = (AbsoluteLayout) findViewById(R.id.layoutbase);       

    drawOval(); 

}
public void drawOval(){ //, int screenWidth, int screenHeight){ 
    AbsoluteLayout layoutbase = (AbsoluteLayout) findViewById(R.id.layoutbase);     

    int screenWidth = layoutbase.getWidth();
    int screenHeight = layoutbase.getHeight();
    Log.i("MyActivity", "screenWidth: " + screenWidth + ", screenHeight: " +screenHeight);

    Coordinates c = new Coordinates(BUTTONSIZE,screenWidth,screenHeight);

    ...some code ...

    ((ViewGroup) layoutbase ).addView(mybutton, new AbsoluteLayout.LayoutParams(BUTTONSIZE, BUTTONSIZE, c.mX, c.mY));


    mybutton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            showText(mybutton);
        }
    });
}

public void showText(View button){      

    int x = findViewById(LAYOUT).getWidth();
    int y = findViewById(LAYOUT).getHeight(); 

    Toast message = Toast.makeText(this, "x: " + x , Toast.LENGTH_SHORT);       
    message.show();     


}
Run Code Online (Sandbox Code Playgroud)

getWidth()命令的工作很大showText(),但它不是drawOval().我知道它看起来有点不同但我也使用了int x = findViewById(LAYOUT).getWidth();版本drawOval(),而x/y总是如此0.我真的不明白为什么在前一点似乎没有宽度/高度.即使我实际上在绝对布局上绘制一个按钮,也会getWidth()返回0.显然我想测量尺寸drawOval().

Beb*_*T.N 10

我想会帮助你.

   LinearLayout headerLayout = (LinearLayout)findviewbyid(R.id.headerLayout);
    ViewTreeObserver observer = headerLayout .getViewTreeObserver();
            observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            // TODO Auto-generated method stub
            int headerLayoutHeight= headerLayout.getHeight();
        int headerLayoutWidth = headerLayout.getWidth();
        headerLayout .getViewTreeObserver().removeGlobalOnLayoutListener(
                this);
    }
});


}  
Run Code Online (Sandbox Code Playgroud)


kab*_*uko 7

getWidth()给你0因为onCreate在布局实际发生之前被调用.由于视图能够基于属性或其他元素(fill_parent例如)具有动态位置和大小,因此对于任何给定视图或布局,没有固定大小.在运行时,有一个时间点(实际上它可以根据许多因素重复发生),其中一切都是实际测量和布局的.如果你真的需要高度和宽度,你必须在以后发现它们.