使用gridview的時候,是只能控制列數和列寬,是不能指定每一列的行高的。在載入要顯示的內容時,就算在item的布局檔案中限定了寬高,但是當item被載入gridview中時,布局檔案中的限制是起不到作用的,item會根據載入內容的高度自動調整,如果載入的內容很高或者很矮,那麼item也會變的很高或者很矮,導致gridview每一行或者行與行之間的顯示高度差異很大,無法控制。可以看一下如下的例子:
item的布局檔案:
gridview的布局檔案
adapter中的getview方法:
public view getview(int position, view cv, viewgroup parent) else
bitmap bitmap = null;
bitmap = bitmapfactory.decodefile(getitem(position));
vh.cv.setimagebitmap(bitmap);
return cv;
}
adapter中的資料來源是從mediastore中獲得的的儲存路徑。此時載入無論使用setimagebitmap還是setimageuri,顯示的效果是一樣的。
此時的顯示結果截圖如下:
這三張sd卡上的都是尺寸比較大的,此時的顯示效果原因是這樣的:gridview測了一下每張的高度和寬度。它希望每乙個item都能完整顯示要顯示的內容,因此gridview會把item設定的跟要顯示的內容一樣大,但是gridview有列寬的設定,所以gridview只能把的寬度縮減到指定的列寬,然後將按照原來的寬高比在item中居中進行顯示。但是因為沒有設定行高(也沒有地方指定gridview的行高),因此gridview將item的高度保留為要顯示的原始高度!如果我們給item的布局檔案加上scaletype屬性為fitxy,就可以看到每乙個item不同的高度:
所以,雖然我們給item設定了明確的80dp*80dp,但是作為父控制項的gridview根本不管這一套,gridview會根據自己的原則來設定item的大小,這個原則跟要顯示的影象大小有關。所以,為了真正達到希望的每一行item都能按照80dp*80dp來顯示(不考慮gridview的strechmode對列寬的拉伸),我們有兩種方式:1)改變一下gridview設定item大小的方式,或者2)改變一下item中載入影象的大小。
1)改變gridview設定item大小的方式:
if(cv == null)else
2)也可以改變以下item中要載入的影象的大小
bitmap bitmap = null;
bitmap = bitmapfactory.decodefile(getitem(position));
bitmap = bitmap.createscaledbitmap(bitmap, size, size,false);//這裡的size值和1)中的size值獲取方式一樣,都是80dp
vh.cv.setimagebitmap(bitmap);
上面兩種方法選擇一種就可以,此時顯示的效果會如下所示:
GridView的表頭和行的樣式控制
根據datagrid的經驗,在樣式表中定義好樣式,然後指定表頭 行 間隔行的cssclass,一般都能得到想要的效果。後來,gridview接替datagrid後,如法炮製,發現總是有些不聽使喚的地方,就通過設定字段屬性的方法解決,一直也沒有深究。今天,這個問題又開始困擾我,正好這幾天自己的興致盎然...
C richTextBox如何控制行高的問題
richtextbox控制項是乙個active的控制項,卻沒有乙個明顯的控制文字行高的屬性,於是在網上google了一下,果然網上高手眾多,找到了示例 一測試,真管用,呵呵。下邊是我的測試 public partial class form1 form public form1 private vo...
GridView中的多重表頭及合計行
gridview是乙個比較好的展示資料的控制項,資料可以非常簡單的繫結到 幾乎不用編太多程,但是如果要展示的資料表外形上需要多行表頭,或者合計行,就需要另外處理一下了 一 多行表頭需要過載gridview的 onrowcreated事件 1protected void gvmain rowcreat...