1、item設置的高度和寬度不起做用html
轉自:http://www.cnblogs.com/0616--ataozhijia/p/6031875.htmljava
referece to : http://blog.csdn.net/beibeixiao/article/details/9032569android
1. 在Android開發中會發現,有時listView和GridView的item頂層佈局不起做用,即不能設置高度和寬度express
緣由是當用自定義的adapter時,若是使用convertView= mInflater.inflate(R.layout.material_grid_item, null)apache
方法就不會起做用,這個 方法的第二個參數是父View,傳入爲空,因此沒有加載頂層佈局,此時若是使用app
convertView= mInflater.inflate(R.layout.material_grid_item, parent,false);傳入parent設置的高度和寬度就會起做用了。less
2、自動適配列數ide
轉自:http://blog.csdn.net/archer_zoro/article/details/43500389佈局
寫了一個展現多張圖片的gridview(幾乎每一個listview裏面都有一個gridview)post
以前用auto_fit和設置列寬來控制列數,以達到自適應的目的。
這樣的效果就是圖片寬度最小爲item_image_size,會在接近這個大小的狀況下,自動調整一些大小將gridview佔滿,間隔不變。3列。
然後來在720p以上的手機上運行時,變成了4列,可是要求是3列,因而我把列數從auto_fit改爲了3,依然是上面的顯示效果,
可是,在滑動listview的過程當中明顯比剛纔卡頓了,因此有改回了auto_fit,轉而把item_image_size增大了。
原理不清楚,留下這個坑待研究
轉自:http://blog.csdn.net/maizangxiangwang/article/details/50913900
/** * 獲取屏幕寬度 */ public static int getScreenWidth(Context context) { WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); return display.getWidth(); } public static int dipToPx(Context context, int dip) { if(density <= 0.0F) { density = context.getResources().getDisplayMetrics().density; } return (int)((float)dip * density + 0.5F); }
給gridview子項要屏幕適配,子項item寬度,高度與寬度相同
itemWidth = (getScreenWidth(this)-(3*dipToPx(this, 3)))/2;
在gridview的adapter中的getview中設置子項的參數
public View getView(int position, View convertView, ViewGroup parent) { ViewHodler viewHodler; String url = blogAlbumList.get(position).getAlbumUrl(); if (convertView == null) { convertView = View.inflate(context, R.layout.celebrity_item, null); viewHodler = new ViewHodler(); viewHodler.iv_image = (ImageView) convertView.findViewById(R.id.iv_image); convertView.setTag(viewHodler); } else { viewHodler = (ViewHodler) convertView.getTag(); } // if (viewHodler.iv_image.getTag()!=url ||viewHodler.iv_image.getTag()==null) { ImageTools.getImageLoader().displayImage(blogAlbumList.get(position).getAlbumUrl(), viewHodler.iv_image, mDisplayImageOptions); // viewHodler.iv_image.setTag(url); // } AbsListView.LayoutParams param = new AbsListView.LayoutParams(LeoApplication.itemWidth, LeoApplication.itemWidth); convertView.setLayoutParams(param); return convertView; }
其實gridview有個屬性.Android:stretchMode=」columnWidth"//縮放與列寬大小同步
1.android:numColumns=」auto_fit」 //GridView的列數設置爲自動
2.android:columnWidth=」90dp " //每列的寬度,也就是Item的寬度
3.android:stretchMode=」columnWidth"//縮放與列寬大小同步
4.android:verticalSpacing=」10dp」 //兩行之間的邊距
5.android:horizontalSpacing=」10dp」 //兩列之間的邊距
6.android:cacheColorHint="#00000000" //去除拖動時默認的黑色背景
7.android:listSelector="#00000000" //去除選中時的黃色底色
8.android:scrollbars="none" //隱藏GridView的滾動條
9.android:fadeScrollbars="true" //設置爲true就能夠實現滾動條的自動隱藏和顯示
10.android:fastScrollEnabled="true" //GridView出現快速滾動的按鈕(至少滾動4頁纔會顯示)
11.android:fadingEdge="none" //GridView衰落(褪去)邊緣顏色爲空,缺省值是vertical。(能夠理解爲上下邊緣的提示色)
12.android:fadingEdgeLength="10dip" //定義的衰落(褪去)邊緣的長度
13.android:stackFromBottom="true" //設置爲true時,你作好的列表就會顯示你列表的最下面
14.android:transcriptMode="alwaysScroll" //當你動態添加數據時,列表將自動往下滾動最新的條目能夠自動滾動到可視範圍內
15.android:drawSelectorOnTop="false" //點擊某條記錄不放,顏色會在記錄的後面成爲背景色,內容的文字可見(缺省爲false)
3、添加Header和Footer
轉自:http://blog.csdn.net/zhzhyang0313/article/details/39163735
實現這個功能通常有兩種思路,一種思路是使用ScrollView+GridView,第二種思路是使用ListView來實現GridView的效果。
第一種思路的具體實現是把HeaderView和GridView都放到ScrollView裏面,這裏要解決的問題是ScrollView和GridView滑動手勢的衝突問題,解決辦法是讓GridView充滿ScrollView,不讓GridView滑動而只讓ScrollView滑動。具題作法是重載GridView的onMeasure()方法。
這種方法的不足是GridView中的View沒有複用,若是內容較多將比較消耗內存。
第二種思路的具體實現是使用ListView的addHeaderView()來添加HeaderView,而ListView的每一行都放一個LinearLayout來保存一行的item,這裏要注意的是item的個數和ListView行數的關係。
後來在StackOverFlow上又看到了第三中方法。原來Google已經用GridView實現了,並且很巧妙,下面把代碼貼出來
代碼地址:https://android.googlesource.com/platform/packages/apps/Gallery2/+/idea133/src/com/android/photos/