本人发帖宗旨:
1.不长篇大论。
2.发文前简单搜一下是不是有人发过(简单的)。
3.直说知识点,基础知识请自行补习。
4.随性
前提:使用android.support.v7.widget.GridLayout包,兼容性强了不少。用的Layout Inspector展示,GridLayout子View大小由GridLayout管理,所以想自己控制的朋友请在GridLayout处理完后再设置大小。
熟悉GridLayout的朋友一定发愁动态添加子View,固定View直接写一个布局文件就行了,可以用app:layout_columnWeight="1"和 app:layout_rowWeight="1"实现平均分布,但是动态添加子View就不行了。
(⊙o⊙),那是功夫不到家,我扒了半天代码,定位到weight和spec有关,听我娓娓道来。
然后就是怎么设置spec到GridLayout上有效果
为子View设置layout布局参数,注意是这个GridLayout.LayoutParams mLayoutParams = new GridLayout.LayoutParams(rowSpec,columnSpec);rowSpec和columnSpec怎么来的?
mLayoutParams.columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1, 1.0f);Spec构造器有好多个,这个三个参数中
第一个为位置坐标(android:layout_row 和 android:layout_column )
第二个参数为合并(android:layout_rowSpan和android:layout_columnSpan跨行列显示)
第三个参数为权重weight,float类型;
3.往GridLayout里添加设置了以上布局的View就行了,结束。
4.其他
父布局
<LinearLayout
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"></LinearLayout>
自定义View(还不知道具体写啥)
public class ImageLayout extends GridLayout {
public ImageLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ImageLayout(Context context) {
super(context);
init();
}
private void init() {
setBackgroundColor(Color.GRAY);
setColumnCount(5);
setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
for (int mI = 0; mI < 10; mI++) {
ImageView mImageView = new ImageView(getContext());
GridLayout.LayoutParams mLayoutParams = new GridLayout.LayoutParams();
mLayoutParams.columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1, 1.0f);
mLayoutParams.rowSpec = GridLayout.spec(GridLayout.UNDEFINED, 1, 1.0f);
mImageView.setLayoutParams(mLayoutParams);
mImageView.setScaleType(ImageView.ScaleType.CENTER);
mImageView.setImageResource(R.drawable.ic_launcher);
addView(mImageView);
}
}
}