GridView getMeauredHeight()或getHeight()给出0

时间:2012-02-06 12:28:25

标签: android gridview height

我想根据Android手机的屏幕尺寸在Gridview动态中创建行数。所以我需要onCreate()中的Gridview的高度来计算行数。(高度/ colums)这里是一个代码片段::

public class GridActivity extends Activity
{
     GridView gridView;
     GridAdapter adapter;'

     public void onCreate(Bundle savedInstance state)
     {
          setContentView(R.layout.gridview);
          gridView = (GridView) findViewById(R.id.grid);

          adapter = new GridAdapter(this);
          gridView.setAdapter(adapter);

          int gridHeight = gridView.getMeasuredHeight();
          Log.d("tag"," height :: " + gridHeight);
     }
 }

在log cat中显示 - height :: 0 我不明白,在适当膨胀后它给出零。

这是一个错误吗?或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

除非将窗口绘制到窗口,否则GridView将返回0个高度和0高度,因此您无法获得GridVIew的高度,问题的解决方法可能是: 通过比较设备的总高度和在将n-1个视图绘制到屏幕后占用的GridView的高度,将第N个视图添加到gridView。

public void addNCompareHeight(View view)
 {   
    ViewTreeObserver observer = grid.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            //in here, place the code that requires you to know the dimensions.
            //this will be called as the layout is finished, prior to displaying.
            if(gridHeight<requiredHeight)
            {
                 grid.addView(view);
                 addNCompareHeight(next);
            }
        }
    }

答案 1 :(得分:0)

我不确定您将如何将您的移动屏幕尺寸与GridView高度联系起来。但这里是找到屏幕分辨率和GridView高度的代码。

1)要查找屏幕分辨率,请在onCreate(),

中执行此操作
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int screen_width = dm.widthPixels;
    int screen_height = dm.heightPixels;

2)要查找gridView高度,您可以使用以下方法

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
     // TODO Auto-generated method stub 
     super.onWindowFocusChanged(hasFocus);
     System.out.println("...111Height..."+gridview.getMeasuredWidth()); 
}