Android實現(xiàn)九宮格(GridView中各項平分空間)的方法
本文實例講述了Android實現(xiàn)九宮格(GridView中各項平分空間)的方法。分享給大家供大家參考。具體如下:
項目需要做一個九宮格(也不一定是9的,4宮格、16宮格、4x3宮格。。。),封了 一個宮格,它能夠根據(jù)為它分配的空間來自動的調(diào)節(jié)宮中各項的尺寸。
從TableLayout集成來的,因此如果你直接在設(shè)計器上使用該封裝的話需要把它自動加進(jìn)去的那幾個TableRow刪除一下。
類名為AdvancedGridView,代碼如下:
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
/**
* AdvancedGridView
* @author RobinTang
* @time 2012-10-15
*/
public class AdvancedGridView extends TableLayout {
// private static final String tag = "AdvancedGridView";
private int rowNum = 0; // row number
private int colNum = 0; // col number
private BaseAdapter adapter = null;
private Context context = null;
public AdvancedGridView(Context context) {
super(context);
initThis(context, null);
}
public AdvancedGridView(Context context, AttributeSet attrs) {
super(context, attrs);
initThis(context, attrs);
}
private void initThis(Context context, AttributeSet attrs) {
this.context = context;
if (this.getTag() != null) {
String atb = (String) this.getTag();
int ix = atb.indexOf(',');
if (ix > 0) {
rowNum = Integer.parseInt(atb.substring(0, ix));
colNum = Integer.parseInt(atb.substring(ix+1, atb.length()));
}
}
if (rowNum <= 0)
rowNum = 3;
if (colNum <= 0)
colNum = 3;
if(this.isInEditMode()){
this.removeAllViews();
for(int y=0; y<rowNum; ++y){
TableRow row = new TableRow(context);
row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1.0f));
for(int x=0; x<colNum; ++x){
View button = new Button(context);
row.addView(button, new TableRow.LayoutParams (LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f));
}
this.addView(row);
}
}
}
public BaseAdapter getAdapter() {
return adapter;
}
public void setAdapter(BaseAdapter adapter) {
if(adapter != null){
if(adapter.getCount() < this.rowNum*this.colNum){
throw new IllegalArgumentException("The view count of adapter is less than this gridview's items");
}
this.removeAllViews();
for(int y=0; y<rowNum; ++y){
TableRow row = new TableRow(context);
row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1.0f));
for(int x=0; x<colNum; ++x){
View view = adapter.getView(y*colNum+x, this, row);
row.addView(view, new TableRow.LayoutParams (LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f));
}
this.addView(row);
}
}
this.adapter = adapter;
}
public int getRowNum() {
return rowNum;
}
public void setRowNum(int rowNum) {
this.rowNum = rowNum;
}
public int getColNum() {
return colNum;
}
public void setColNum(int colNum) {
this.colNum = colNum;
}
}
如果你想在設(shè)計階段就看到宮格效果的話,你可以在該空間的Tag屬性上設(shè)置行列個數(shù)。比如我想看到3x3的宮格樣子的話就設(shè)置成"3,3",如下圖,當(dāng)然你也可以在代碼中使用setRowNum()和setColNum()來進(jìn)行設(shè)置,但是請在設(shè)置適配器前調(diào)用這兩個方法。

希望本文所述對大家的Android程序設(shè)計有所幫助。
相關(guān)文章
Android如何自定義EditText光標(biāo)與下劃線顏色詳解
在android開發(fā)中 EditTextText是我們經(jīng)常用到的,我們使用時會有一些小問題,下面這篇文章主要給大家介紹了關(guān)于利用Android如何自定義EditText光標(biāo)與下劃線顏色的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08
Android不使用自定義布局情況下實現(xiàn)自定義通知欄圖標(biāo)的方法
這篇文章主要介紹了Android不使用自定義布局情況下實現(xiàn)自定義通知欄圖標(biāo)的方法,實例分析了Android通知欄圖標(biāo)的創(chuàng)建技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-12-12
VerticalBannerView仿淘寶頭條實現(xiàn)垂直輪播廣告
這篇文章主要為大家詳細(xì)介紹了VerticalBannerView仿淘寶頭條實現(xiàn)垂直輪播廣告,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08
Android 定位系統(tǒng)(GPS)開發(fā)詳解
GPS定位是智能手機(jī)上一個比較有意思的功能,LBS等服務(wù)都有效的利用了GPS定位功能,本文就跟大家分享下Android開發(fā)中的GPS定位知識2016-07-07
Handler實現(xiàn)線程之間的通信下載文件動態(tài)更新進(jìn)度條
每一個線程對應(yīng)一個消息隊列MessageQueue,實現(xiàn)線程之間的通信,可通過Handler對象將數(shù)據(jù)裝進(jìn)Message中,再將消息加入消息隊列,而后線程會依次處理消息隊列中的消息。這篇文章主要介紹了Handler實現(xiàn)線程之間的通信下載文件動態(tài)更新進(jìn)度條,需要的朋友可以參考下2017-08-08

