網(wǎng)上關(guān)于GridLayout的使用方法基本上都是用的xml文件,但既然是要使用網(wǎng)格布局寥粹,那說明準(zhǔn)備放入其中的子視圖肯定不少变过,都用xml寫太過繁瑣,那么如果我們想要代碼來描述涝涤,應(yīng)該怎么辦呢媚狰?
問題的關(guān)鍵就是要使用 GridLayout.Spec類。
下面我簡單演示一下利用GridLayout.Spec定義GridLayout阔拳,給出與xml等價的Java下和Xamarin.Android代碼崭孤;
1.
定義子視圖位于4行4列
android:columnCount="3"
android:rowCount="3"
Java
GridLayout.Spec row = GridLayout.spec(3);
GridLayout.Spec col = GridLayout.spec(3);
Button view = new Button(context);
view.setLayoutParams(new GridLayout.LayoutParams(row, col));
gridLayout.addView(view);
Xamarin.Android
需要注意的是,在Xamarin.Android下GridLayout.spec不是GridLayout.Spec糊肠,而是GridLayout.InvokeSpec辨宠。
var row = GridLayout.InvokeSpec(3);
var col = GridLayout.InvokeSpec(3);
var button = new Button(context);
button.LayoutParameters = new GridLayout.LayoutParams(row, col);
gridLayout.AddView(button);
2.
定義子視圖位于4行4列,橫跨2行罪针,縱向跨3列
android:columnCount="3"
android:rowCount="3"
android:layout_rowSpan = "2"
android:layout_columnSpan = "3"
Java
GridLayout.Spec row = GridLayout.spec(3,2);
GridLayout.Spec col = GridLayout.spec(3,3);
Button view = new Button(context);
view.setLayoutParams(new GridLayout.LayoutParams(row, col));
gridLayout.addView(view);
Xamarin.Android
var row = GridLayout.InvokeSpec(3,2);
var col = GridLayout.InvokeSpec(3,3);
var button = new Button(context);
button.LayoutParameters = new GridLayout.LayoutParams(row, col);
gridLayout.AddView(button);
3.
定義子視圖位于4行4列彭羹,橫縱的比重都為1;
android:columnCount="3"
android:rowCount="3"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
Java
GridLayout.Spec row = GridLayout.spec(3,1.0f);
GridLayout.Spec col = GridLayout.spec(3,1.0f);
Button view = new Button(context);
view.setLayoutParams(new GridLayout.LayoutParams(row, col));
gridLayout.addView(view);
Xamarin.Android
var row = GridLayout.InvokeSpec(3,1.0f);
var col = GridLayout.InvokeSpec(3,1.0f);
var button = new Button(context);
button.LayoutParameters = new GridLayout.LayoutParams(row, col);
gridLayout.AddView(button);
這里需要注意和2代碼的不同在于傳遞給GridLayout.spec方法的參數(shù)類型不同泪酱,如果是int型則表示是size派殷,如果是float型則表示weight还最。
注意:為了使子視圖完全按照我們給定的權(quán)重進(jìn)行布局,我們可以將params的width和height設(shè)為0毡惜,但在Android5.1版本上使用該方法可能會出現(xiàn)子視圖不可見的情況拓轻,這個時候我們還需要添加params.setGravity(Gravity.FILL);
GridLayout.spec還有更復(fù)雜的重載版本。
Xamarin.Android都有與之對應(yīng)的方法经伙,只不過調(diào)用名為InvokeSpec而已扶叉。