Refactor, ability to use additional spacing with auto = true
This commit is contained in:
parent
cf8346187f
commit
d4c6e92a34
4 changed files with 60 additions and 62 deletions
|
@ -6,19 +6,29 @@
|
|||
|
||||
<net.osmand.plus.widgets.FlowLayout
|
||||
android:id="@+id/select_custom_color"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/list_content_padding"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginEnd="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding" />
|
||||
|
||||
<include
|
||||
layout="@layout/simple_divider_item"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginStart="@dimen/list_content_padding"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginTop="@dimen/context_menu_padding_margin_tiny"
|
||||
android:layout_marginBottom="@dimen/content_padding_half" />
|
||||
|
||||
<net.osmand.plus.widgets.FlowLayout
|
||||
android:id="@+id/select_default_color"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/list_content_padding"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginEnd="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding" />
|
||||
|
||||
</LinearLayout>
|
|
@ -453,11 +453,9 @@
|
|||
android:id="@+id/select_color"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/content_padding_small"
|
||||
android:layout_marginTop="@dimen/context_menu_padding_margin_tiny"
|
||||
android:layout_marginBottom="@dimen/content_padding_half"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginStart="@dimen/content_padding_small" />
|
||||
android:orientation="horizontal" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -645,7 +645,8 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment implemen
|
|||
horizontalSelectionAdapter.notifyDataSetChanged();
|
||||
iconCategoriesRecyclerView.smoothScrollToPosition(horizontalSelectionAdapter.getItemPositionByTitle(selectedIconCategory));
|
||||
for (String name : iconNameList) {
|
||||
selectIcon.addView(createIconItemView(name, selectIcon), new FlowLayout.LayoutParams(0, 0));
|
||||
int minimalPaddingBetweenIcon = app.getResources().getDimensionPixelSize(R.dimen.favorites_select_icon_button_right_padding);
|
||||
selectIcon.addView(createIconItemView(name, selectIcon), new FlowLayout.LayoutParams(minimalPaddingBetweenIcon, 0));
|
||||
selectIcon.setHorizontalAutoSpacing(true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,22 +12,6 @@ public class FlowLayout extends ViewGroup {
|
|||
private int line_height;
|
||||
private boolean horizontalAutoSpacing;
|
||||
|
||||
public static class LayoutParams extends ViewGroup.LayoutParams {
|
||||
|
||||
final int horizontalSpacing;
|
||||
final int verticalSpacing;
|
||||
|
||||
/**
|
||||
* @param horizontalSpacing Pixels between items, horizontally
|
||||
* @param verticalSpacing Pixels between items, vertically
|
||||
*/
|
||||
public LayoutParams(int horizontalSpacing, int verticalSpacing) {
|
||||
super(0, 0);
|
||||
this.horizontalSpacing = horizontalSpacing;
|
||||
this.verticalSpacing = verticalSpacing;
|
||||
}
|
||||
}
|
||||
|
||||
public FlowLayout(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
@ -36,7 +20,7 @@ public class FlowLayout extends ViewGroup {
|
|||
super(context, attrs);
|
||||
}
|
||||
|
||||
// If true available horizontal space is added to items horizontalSpacing.
|
||||
// If true, available horizontal space is added to items horizontalSpacing to fit the screen width.
|
||||
public void setHorizontalAutoSpacing(boolean horizontalAutoSpacing) {
|
||||
this.horizontalAutoSpacing = horizontalAutoSpacing;
|
||||
}
|
||||
|
@ -100,56 +84,61 @@ public class FlowLayout extends ViewGroup {
|
|||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||
final int count = getChildCount();
|
||||
final int width = r - l;
|
||||
int freeSizeSpacing;
|
||||
boolean isLayoutRtl = AndroidUtils.isLayoutRtl(getContext());
|
||||
int horizontalPosition = isLayoutRtl ? width - getPaddingRight() : getPaddingLeft();
|
||||
int verticalPosition = getPaddingTop();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final View child = getChildAt(i);
|
||||
if (child.getVisibility() != GONE) {
|
||||
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
|
||||
final int childWidth = child.getMeasuredWidth();
|
||||
final int childHeight = child.getMeasuredHeight();
|
||||
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
|
||||
int itemsCount = width / childWidth;
|
||||
if (itemsCount > 1) {
|
||||
freeSizeSpacing = width % childWidth / (itemsCount - 1);
|
||||
} else {
|
||||
freeSizeSpacing = width % childWidth / itemsCount;
|
||||
}
|
||||
if (horizontalAutoSpacing) {
|
||||
if (isLayoutRtl) {
|
||||
if (horizontalPosition - childWidth < getPaddingLeft()) {
|
||||
horizontalPosition = width - getPaddingRight();
|
||||
verticalPosition += line_height;
|
||||
}
|
||||
child.layout(horizontalPosition - childWidth, verticalPosition, horizontalPosition, verticalPosition + childHeight);
|
||||
horizontalPosition -= childWidth + lp.horizontalSpacing + freeSizeSpacing;
|
||||
} else {
|
||||
if (horizontalPosition + childWidth > width) {
|
||||
horizontalPosition = getPaddingLeft();
|
||||
verticalPosition += line_height;
|
||||
}
|
||||
child.layout(horizontalPosition, verticalPosition, horizontalPosition + childWidth, verticalPosition + childHeight);
|
||||
horizontalPosition += childWidth + lp.horizontalSpacing + freeSizeSpacing;
|
||||
int freeSizeSpacing = getFreeSizeSpacing(width, lp, childWidth);
|
||||
if (isLayoutRtl) {
|
||||
if (horizontalPosition - childWidth < getPaddingLeft()) {
|
||||
horizontalPosition = width - getPaddingRight();
|
||||
verticalPosition += line_height;
|
||||
}
|
||||
child.layout(horizontalPosition - childWidth, verticalPosition, horizontalPosition, verticalPosition + childHeight);
|
||||
horizontalPosition -= childWidth + freeSizeSpacing;
|
||||
} else {
|
||||
if (isLayoutRtl) {
|
||||
if (horizontalPosition - childWidth < l) {
|
||||
horizontalPosition = width - getPaddingRight();
|
||||
verticalPosition += line_height;
|
||||
}
|
||||
child.layout(horizontalPosition - childWidth, verticalPosition, horizontalPosition, verticalPosition + childHeight);
|
||||
horizontalPosition -= childWidth + lp.horizontalSpacing;
|
||||
} else {
|
||||
if (horizontalPosition + childWidth > width) {
|
||||
horizontalPosition = getPaddingLeft();
|
||||
verticalPosition += line_height;
|
||||
}
|
||||
child.layout(horizontalPosition, verticalPosition, horizontalPosition + childWidth, verticalPosition + childHeight);
|
||||
horizontalPosition += childWidth + lp.horizontalSpacing;
|
||||
if (horizontalPosition + childWidth > width) {
|
||||
horizontalPosition = getPaddingLeft();
|
||||
verticalPosition += line_height;
|
||||
}
|
||||
child.layout(horizontalPosition, verticalPosition, horizontalPosition + childWidth, verticalPosition + childHeight);
|
||||
horizontalPosition += childWidth + freeSizeSpacing;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int getFreeSizeSpacing(int width, LayoutParams lp, int childWidth) {
|
||||
int freeSizeSpacing;
|
||||
int itemsCount = width / (childWidth + lp.horizontalSpacing);
|
||||
if (itemsCount > 1 && horizontalAutoSpacing) {
|
||||
freeSizeSpacing = (width % childWidth / (itemsCount - 1)) + lp.horizontalSpacing;
|
||||
} else if (!horizontalAutoSpacing) {
|
||||
freeSizeSpacing = lp.horizontalSpacing;
|
||||
} else {
|
||||
freeSizeSpacing = (width % childWidth / itemsCount) + lp.horizontalSpacing;
|
||||
}
|
||||
return freeSizeSpacing;
|
||||
}
|
||||
|
||||
public static class LayoutParams extends ViewGroup.LayoutParams {
|
||||
|
||||
final int horizontalSpacing;
|
||||
final int verticalSpacing;
|
||||
|
||||
/**
|
||||
* @param horizontalSpacing Pixels between items, horizontally
|
||||
* @param verticalSpacing Pixels between items, vertically
|
||||
*/
|
||||
public LayoutParams(int horizontalSpacing, int verticalSpacing) {
|
||||
super(0, 0);
|
||||
this.horizontalSpacing = horizontalSpacing;
|
||||
this.verticalSpacing = verticalSpacing;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue