我有什么:
我想做什么:
每当我添加项目时,我希望它放在前一个项目旁边。如果元素位于屏幕的末尾:我希望它放在下一行
类似于 CSS 中的float: left
。
答案 0 :(得分:2)
如果您希望您的代码容器最终滚动,请使用RecyclerView和GridLayoutManager并调用setSpanCount(3)
。不要忘记将其方向设置为VERTICAL
如果您不想让您的商品滚动,请使用GridLayout
编辑:
我把粗略的例子放在一起,以你想要的方式工作。你可能还需要考虑边距和填充,但它应该作为一个基本的想法如何做到这一点。
public class TagLayout extends ViewGroup {
public TagLayout(Context context) {
super(context);
}
public TagLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TagLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public TagLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
int maxWidth = getMeasuredWidth();
int count = getChildCount();
int tagLeft = left,
tagTop = top,
tagRight = 0,
tagBottom = 0;
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != GONE) {
tagRight = tagLeft + child.getMeasuredWidth();
tagBottom = tagTop + child.getMeasuredHeight();
if (tagRight > maxWidth) {
tagLeft = left;
tagRight = left + child.getMeasuredWidth();
tagTop = tagBottom;
tagBottom += child.getMeasuredHeight();
}
child.layout(tagLeft, tagTop, tagRight, tagBottom);
tagLeft = left;
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = 0;
int height = 0;
int count = getChildCount();
int maxWidth = MeasureSpec.getSize(widthMeasureSpec);
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != GONE) {
measureChild(child, widthMeasureSpec, heightMeasureSpec);
width += child.getMeasuredWidth();
if (height == 0) {
height += child.getMeasuredHeight();
}
if (width <= maxWidth) {
continue;
} else {
width = 0;
height += child.getMeasuredHeight();
}
}
}
setMeasuredDimension(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
}
}
答案 1 :(得分:1)
您需要的是像Java Swing FlowLayout这样的布局。您可以在网络上进行一些实施。这个图书馆很有前景,但我自己没试过。
如果这对您不起作用,我将编辑并发布我使用的FlowLayout实现。我现在不能这样做,因为我离开了我的工作机器。