Fixes long content warnings in posts wasting space. Closes #173

main
Vavassor 8 years ago
parent a75fb790c0
commit 6e4725d2dd
  1. 35
      app/src/main/java/com/keylesspalace/tusky/util/FlowLayout.java

@ -26,7 +26,6 @@ import com.keylesspalace.tusky.R;
public class FlowLayout extends ViewGroup {
private int paddingHorizontal; // internal padding between child views
private int paddingVertical; //
private int totalHeight;
public FlowLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
@ -34,11 +33,10 @@ public class FlowLayout extends ViewGroup {
public FlowLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs, R.styleable.FlowLayout, 0, 0);
TypedArray a = context.getTheme()
.obtainStyledAttributes(attrs, R.styleable.FlowLayout, 0, 0);
try {
paddingHorizontal = a.getDimensionPixelSize(
R.styleable.FlowLayout_paddingHorizontal, 0);
paddingHorizontal = a.getDimensionPixelSize(R.styleable.FlowLayout_paddingHorizontal, 0);
paddingVertical = a.getDimensionPixelSize(R.styleable.FlowLayout_paddingVertical, 0);
} finally {
a.recycle();
@ -59,26 +57,29 @@ public class FlowLayout extends ViewGroup {
} else {
childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
}
totalHeight = 0;
int rowHeight = 0;
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
if (child.getVisibility() != GONE) {
child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST),
childHeightMeasureSpec);
int widthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST);
child.measure(widthSpec, childHeightMeasureSpec);
int childwidth = child.getMeasuredWidth();
totalHeight = Math.max(totalHeight, child.getMeasuredHeight() + paddingVertical);
int childHeight = child.getMeasuredHeight();
if (x + childwidth > width) {
x = getPaddingLeft();
y += totalHeight;
y += rowHeight;
rowHeight = childHeight + paddingVertical;
} else {
rowHeight = Math.max(rowHeight, childHeight + paddingVertical);
}
x += childwidth + paddingHorizontal;
}
}
if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.UNSPECIFIED) {
height = y + totalHeight;
height = y + rowHeight;
} else if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
if (y + totalHeight < height) {
height = y + totalHeight;
if (y + rowHeight < height) {
height = y + rowHeight;
}
}
height += 5; // Fudge to avoid clipping bottom of last row.
@ -90,6 +91,7 @@ public class FlowLayout extends ViewGroup {
final int width = r - l;
int x = getPaddingLeft();
int y = getPaddingTop();
int rowHeight = 0;
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
if (child.getVisibility() != GONE) {
@ -97,11 +99,14 @@ public class FlowLayout extends ViewGroup {
int childHeight = child.getMeasuredHeight();
if (x + childWidth > width) {
x = getPaddingLeft();
y += totalHeight;
y += rowHeight;
rowHeight = childHeight + paddingVertical;
} else {
rowHeight = Math.max(childHeight, rowHeight);
}
child.layout(x, y, x + childWidth, y + childHeight);
x += childWidth + paddingHorizontal;
}
}
}
}
}
Loading…
Cancel
Save