用代码实现GridLayout平均分布样式

本人发帖宗旨:
1.不长篇大论。
2.发文前简单搜一下是不是有人发过(简单的)。
3.直说知识点,基础知识请自行补习。
4.随性

前提:使用android.support.v7.widget.GridLayout包,兼容性强了不少。用的Layout Inspector展示,GridLayout子View大小由GridLayout管理,所以想自己控制的朋友请在GridLayout处理完后再设置大小。

用代码实现GridLayout平均分布样式_第1张图片
Paste_Image.png

熟悉GridLayout的朋友一定发愁动态添加子View,固定View直接写一个布局文件就行了,可以用app:layout_columnWeight="1"和 app:layout_rowWeight="1"实现平均分布,但是动态添加子View就不行了。

(⊙o⊙),那是功夫不到家,我扒了半天代码,定位到weight和spec有关,听我娓娓道来。

  1. 然后就是怎么设置spec到GridLayout上有效果
    为子View设置layout布局参数,注意是这个GridLayout.LayoutParams mLayoutParams = new GridLayout.LayoutParams(rowSpec,columnSpec);

  2. 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.其他
父布局

  

自定义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);
    }
  }
  }

你可能感兴趣的:(用代码实现GridLayout平均分布样式)