2012-12-20 3 views
13

Chcę ustawić programowo programowalną wysokość mojego Gridview w mojej aplikacji.jak ustawić wysokość gridview programowo Android

Czy istnieje sposób na wdrożenie tego?

Chcę tylko zmienić wysokość widoku siatki w dwóch partiach z kodu.

Edycja:

<fragment 
    android:id="@+id/mygridview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dip" 
    class="com.myapp.android.MyGridViewClass" /> 

MyGridViewClass rozciąga Fragment GridView którym jest wypełniona.

<GridView 
    android:id="@+id/mygridview_container" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="5dip" 
    android:columnWidth="90dp" 
    android:gravity="center_vertical|center_horizontal" 
    android:horizontalSpacing="1dp" 
    android:numColumns="3" 
    android:scrollbars="vertical" 
    android:stretchMode="spacingWidthUniform" 
    android:verticalSpacing="5dp" /> 

W myGridViewClass onViewCreated, jestem pompowania GridView przy użyciu kodu,

gridView = (GridView)getView().findViewById(R.id.mygridview_container); 
gridAdapter = new MyCustomAdapter(context, list); 
gridView.setAdapter(gridAdapter); 

Ilekroć widok jest tworzony muszę sprawdzić liczbę elementów w gridview i ustawić wysokość odpowiednio.

Kiedy próbowałem ustawić layoutParams() na gridview, otrzymałem ten wyjątek.

android.view.InflateException: Binary XML file line #89: Error inflating class fragment 

Jeżeli linia 89 odpowiada tej linii we fragmencie class = "com.myapp.android.MyGridViewClass"

+0

InflateException ogół mają przyczynę. Proszę podać pełny stacktrace – ben75

+0

Poprawnie działający odnośnik [Wysokość widoku Gridview jest przycinany] (http://stackoverflow.com/questions/8481844/gridview-height-gets-cut) –

Odpowiedz

26

Użyj tego, jak chcesz zachować bieżący numer layoutParams: aby wprowadzić wysokość jak dp zamiast pikseli, tłumaczyć ilość dp do pikseli:

public static int convertDpToPixels(float dp, Context context){ 
    Resources resources = context.getResources(); 
    return (int) TypedValue.applyDimension(
      TypedValue.COMPLEX_UNIT_DIP, 
      dp, 
      resources.getDisplayMetrics() 
    ); 
} 
+0

Dzięki, przyjacielu, też próbowałem tej metody Nie działa, używam fragmentu, do którego nadmuchuję ten widok siatki.Może to blokuje ten kod Otrzymuję 'InflateException' dla określonej klasy, która jest' class = "com.myapp.android.MyGridViewClass" ' – DroidBee

+0

Zastanawiam się, co to jest 'lp' tutaj –

+0

@twntee patrz edit.lp = layoutParams – stealthjong

3

myślę, że to powinno działać:

GridView gridView = (GridView)findViewById(...); 
ViewGroup.LayoutParams lp=new ViewGroup.LayoutParams(width,height); 
gridView.setLayoutParams(lp); 
+0

Próbowałem tej metody, ale otrzymuję komunikat ClassCastException .. ! – DroidBee

+0

dwukrotnie sprawdź identyfikator używanego w findViewById – ben75

+0

Tak, sprawdziłem. To jest poprawne. – DroidBee