GridView getMeauredHeight () или getHeight () дает 0 - PullRequest
0 голосов
/ 06 февраля 2012

Я хочу, чтобы число строк в Gridview было динамичным в зависимости от размера экрана телефона Android.так что мне нужна высота Gridview в onCreate () для подсчета количества строк. (высота / столбцы) вот фрагмент кода ::

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);
     }
 }

В журнале cat это показывает - высота :: 0 Iне понимаю, что он дает ноль после правильного надувания.

Это ошибка?Или я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2012

Я не уверен, как вы будете соотносить размер экрана вашего мобильного телефона и высоту 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()); 
}
0 голосов
/ 06 февраля 2012

GridView вернет 0 измеренную высоту и 0 высоту, если он не будет нарисован в окне, поэтому вы не можете получить высоту GridVIew в точке. Обходное решение вашей проблемы может быть следующим: Добавьте ваш N-й вид в gridView, сравнив общую высоту устройства.с высотой GridView, занятой после отображения n-1 видов на экране.

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);
            }
        }
    }
...