2012-12-20 110 views
13

我想在我的應用程序中以編程方式設置我的Gridview的高度。如何以編程方式設置gridview的高度android

有什麼辦法可以實現嗎?

我只是想改變兩個特定的代碼中的gridview高度。

編輯:

<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延伸片段,其中被填充的GridView。

<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" /> 

在myGridViewClass onViewCreated,我使用的代碼充氣gridview的,

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

每當視圖中創建我要檢查在GridView的項目數,並相應地設置高度。

當我嘗試爲gridview設置layoutParams()時,我得到了這個異常。

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

哪裏線89對應於這條線的片段 類= 「com.myapp.android.MyGridViewClass」

+0

InflateException通常具有根本原因。請提供完整的堆棧跟蹤 – ben75

+0

正確地工作了這個引用鏈接[Gridview高度被削減](http://stackoverflow.com/questions/8481844/gridview-height-gets-cut) –

回答

26

使用此,作爲你想保留目前的layoutParams

ViewGroup.LayoutParams layoutParams = yourGridview.getLayoutParams(); 
layoutParams.height = 50; //this is in pixels 
yourGridview.setLayoutParams(layoutParams); 

編輯:如果你想輸入高度dp代替像素,dp量轉換爲像素:

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

感謝朋友,我也試過這種方法。不工作我正在使用一個片段,我正在這個gridview充氣。也許這是阻止這個代碼。我得到一個'InflateException'指定的類是'class =「com.myapp.android.MyGridViewClass」' – DroidBee

+0

我想知道'lp'是什麼。 –

+0

@twntee see edit。lp = layoutParams – stealthjong

3

我認爲這應該工作:

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

我試過這個方法,但我得到了classCastException .. ! – DroidBee

+0

仔細檢查您在findViewById中使用的id – ben75

+0

是的,我查了一下。這是正確的。 – DroidBee

相關問題