mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Added percentage support for width, height and margin properties.
This commit is contained in:
@@ -18,6 +18,7 @@ public class AbsoluteLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
CommonLayoutParams.adjustChildrenLayoutParams(this, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
int measureWidth = 0;
|
int measureWidth = 0;
|
||||||
int measureHeight = 0;
|
int measureHeight = 0;
|
||||||
@@ -30,7 +31,6 @@ public class AbsoluteLayout extends LayoutBase {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonLayoutParams.updateChildLayoutParams(child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
CommonLayoutParams.measureChild(child, childMeasureSpec, childMeasureSpec);
|
CommonLayoutParams.measureChild(child, childMeasureSpec, childMeasureSpec);
|
||||||
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
||||||
final int childMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
final int childMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
||||||
@@ -56,7 +56,6 @@ public class AbsoluteLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
|
|
||||||
int leftPadding = this.getPaddingLeft();
|
int leftPadding = this.getPaddingLeft();
|
||||||
int topPadding = this.getPaddingTop();
|
int topPadding = this.getPaddingTop();
|
||||||
int count = this.getChildCount();
|
int count = this.getChildCount();
|
||||||
@@ -78,5 +77,7 @@ public class AbsoluteLayout extends LayoutBase {
|
|||||||
|
|
||||||
CommonLayoutParams.layoutChild(child, childLeft, childTop, childRight, childBottom);
|
CommonLayoutParams.layoutChild(child, childLeft, childTop, childRight, childBottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CommonLayoutParams.restoreOriginalParams(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ import android.util.Log;
|
|||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.MeasureSpec;
|
import android.view.View.MeasureSpec;
|
||||||
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewGroup.LayoutParams;
|
import android.view.ViewGroup.LayoutParams;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author hhristov
|
* @author hhristov
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
||||||
|
|
||||||
@@ -36,6 +36,14 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
|||||||
public float bottomMarginPercent = 0;
|
public float bottomMarginPercent = 0;
|
||||||
public float rightMarginPercent = 0;
|
public float rightMarginPercent = 0;
|
||||||
|
|
||||||
|
public int widthOriginal = -1;
|
||||||
|
public int heightOriginal = -1;
|
||||||
|
|
||||||
|
public int topMarginOriginal = -1;
|
||||||
|
public int leftMarginOriginal = -1;
|
||||||
|
public int bottomMarginOriginal = -1;
|
||||||
|
public int rightMarginOriginal = -1;
|
||||||
|
|
||||||
public int left = 0;
|
public int left = 0;
|
||||||
public int top = 0;
|
public int top = 0;
|
||||||
public int row = 0;
|
public int row = 0;
|
||||||
@@ -44,19 +52,19 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
|||||||
public int columnSpan = 1;
|
public int columnSpan = 1;
|
||||||
public Dock dock = Dock.left;
|
public Dock dock = Dock.left;
|
||||||
|
|
||||||
public static int getDesiredWidth(View view) {
|
protected static int getDesiredWidth(View view) {
|
||||||
CommonLayoutParams lp = (CommonLayoutParams) view.getLayoutParams();
|
CommonLayoutParams lp = (CommonLayoutParams) view.getLayoutParams();
|
||||||
return view.getMeasuredWidth() + lp.leftMargin + lp.rightMargin;
|
return view.getMeasuredWidth() + lp.leftMargin + lp.rightMargin;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getDesiredHeight(View view) {
|
protected static int getDesiredHeight(View view) {
|
||||||
CommonLayoutParams lp = (CommonLayoutParams) view.getLayoutParams();
|
CommonLayoutParams lp = (CommonLayoutParams) view.getLayoutParams();
|
||||||
return view.getMeasuredHeight() + lp.topMargin + lp.bottomMargin;
|
return view.getMeasuredHeight() + lp.topMargin + lp.bottomMargin;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We use our own layout method because the one in FrameLayout is broken when margins are set and gravity is CENTER_VERTICAL or CENTER_HORIZONTAL.
|
// We use our own layout method because the one in FrameLayout is broken when margins are set and gravity is CENTER_VERTICAL or CENTER_HORIZONTAL.
|
||||||
@SuppressLint("RtlHardcoded")
|
@SuppressLint("RtlHardcoded")
|
||||||
public static void layoutChild(View child, int left, int top, int right, int bottom) {
|
protected static void layoutChild(View child, int left, int top, int right, int bottom) {
|
||||||
if (child.getVisibility() == View.GONE) {
|
if (child.getVisibility() == View.GONE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -180,7 +188,7 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
|||||||
child.layout(childLeft, childTop, childRight, childBottom);
|
child.layout(childLeft, childTop, childRight, childBottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void measureChild(View child, int widthMeasureSpec, int heightMeasureSpec) {
|
protected static void measureChild(View child, int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
if (child.getVisibility() == View.GONE) {
|
if (child.getVisibility() == View.GONE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -220,7 +228,15 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
|||||||
child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
|
child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateChildLayoutParams(View child, int widthMeasureSpec, int heightMeasureSpec) {
|
/**
|
||||||
|
* Iterates over children and changes their width and height to one calculated from percentage
|
||||||
|
* values.
|
||||||
|
*
|
||||||
|
* @param viewGroup The parent ViewGroup.
|
||||||
|
* @param widthMeasureSpec Width MeasureSpec of the parent ViewGroup.
|
||||||
|
* @param heightMeasureSpec Height MeasureSpec of the parent ViewGroup.
|
||||||
|
*/
|
||||||
|
protected static void adjustChildrenLayoutParams(ViewGroup viewGroup, int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
|
||||||
int availableWidth = MeasureSpec.getSize(widthMeasureSpec);
|
int availableWidth = MeasureSpec.getSize(widthMeasureSpec);
|
||||||
int widthSpec = MeasureSpec.getMode(widthMeasureSpec);
|
int widthSpec = MeasureSpec.getMode(widthMeasureSpec);
|
||||||
@@ -228,33 +244,96 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
|||||||
int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
|
int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
|
||||||
int heightSpec = MeasureSpec.getMode(heightMeasureSpec);
|
int heightSpec = MeasureSpec.getMode(heightMeasureSpec);
|
||||||
|
|
||||||
|
for (int i = 0, count = viewGroup.getChildCount(); i < count; i++) {
|
||||||
|
View child = viewGroup.getChildAt(i);
|
||||||
|
ViewGroup.LayoutParams params = child.getLayoutParams();
|
||||||
|
|
||||||
|
if (params instanceof CommonLayoutParams) {
|
||||||
CommonLayoutParams lp = (CommonLayoutParams) child.getLayoutParams();
|
CommonLayoutParams lp = (CommonLayoutParams) child.getLayoutParams();
|
||||||
if (widthSpec != MeasureSpec.UNSPECIFIED) {
|
if (widthSpec != MeasureSpec.UNSPECIFIED) {
|
||||||
if (lp.widthPercent > 0) {
|
if (lp.widthPercent > 0) {
|
||||||
|
lp.widthOriginal = lp.width;
|
||||||
lp.width = (int) (availableWidth * lp.widthPercent);
|
lp.width = (int) (availableWidth * lp.widthPercent);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lp.widthOriginal = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (lp.leftMarginPercent > 0) {
|
if (lp.leftMarginPercent > 0) {
|
||||||
|
lp.leftMarginOriginal = lp.leftMargin;
|
||||||
lp.leftMargin = (int) (availableWidth * lp.leftMarginPercent);
|
lp.leftMargin = (int) (availableWidth * lp.leftMarginPercent);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lp.leftMarginOriginal = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (lp.rightMarginPercent > 0) {
|
if (lp.rightMarginPercent > 0) {
|
||||||
|
lp.rightMarginOriginal = lp.rightMargin;
|
||||||
lp.rightMargin = (int) (availableWidth * lp.rightMarginPercent);
|
lp.rightMargin = (int) (availableWidth * lp.rightMarginPercent);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lp.rightMarginOriginal = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (heightSpec != MeasureSpec.UNSPECIFIED) {
|
if (heightSpec != MeasureSpec.UNSPECIFIED) {
|
||||||
if (lp.heightPercent > 0) {
|
if (lp.heightPercent > 0) {
|
||||||
|
lp.heightOriginal = lp.height;
|
||||||
lp.height = (int) (availableHeight * lp.heightPercent);
|
lp.height = (int) (availableHeight * lp.heightPercent);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lp.heightOriginal = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (lp.topMarginPercent > 0) {
|
if (lp.topMarginPercent > 0) {
|
||||||
|
lp.topMarginOriginal = lp.topMargin;
|
||||||
lp.topMargin = (int) (availableHeight * lp.topMarginPercent);
|
lp.topMargin = (int) (availableHeight * lp.topMarginPercent);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lp.topMarginOriginal = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (lp.bottomMarginPercent > 0) {
|
if (lp.bottomMarginPercent > 0) {
|
||||||
|
lp.bottomMarginOriginal = lp.bottomMargin;
|
||||||
lp.bottomMargin = (int) (availableHeight * lp.bottomMarginPercent);
|
lp.bottomMargin = (int) (availableHeight * lp.bottomMarginPercent);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lp.bottomMarginOriginal = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates over children and restores their original dimensions that were changed for
|
||||||
|
* percentage values.
|
||||||
|
*/
|
||||||
|
protected static void restoreOriginalParams(ViewGroup viewGroup) {
|
||||||
|
for (int i = 0, count = viewGroup.getChildCount(); i < count; i++) {
|
||||||
|
View view = viewGroup.getChildAt(i);
|
||||||
|
ViewGroup.LayoutParams params = view.getLayoutParams();
|
||||||
|
if (params instanceof CommonLayoutParams) {
|
||||||
|
CommonLayoutParams lp = (CommonLayoutParams) params;
|
||||||
|
if (lp.widthPercent > 0) {
|
||||||
|
lp.width = lp.widthOriginal;
|
||||||
|
}
|
||||||
|
if (lp.heightPercent > 0) {
|
||||||
|
lp.height = lp.heightOriginal;
|
||||||
|
}
|
||||||
|
if (lp.leftMarginPercent > 0) {
|
||||||
|
lp.leftMargin = lp.leftMarginOriginal;
|
||||||
|
}
|
||||||
|
if (lp.topMarginPercent > 0) {
|
||||||
|
lp.topMargin = lp.topMarginOriginal;
|
||||||
|
}
|
||||||
|
if (lp.rightMarginPercent > 0) {
|
||||||
|
lp.rightMargin = lp.rightMarginOriginal;
|
||||||
|
}
|
||||||
|
if (lp.bottomMarginPercent > 0) {
|
||||||
|
lp.bottomMargin = lp.bottomMarginOriginal;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,7 +355,7 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
|||||||
final int margins = horizontal ? lp.leftMargin + lp.rightMargin : lp.topMargin + lp.bottomMargin;
|
final int margins = horizontal ? lp.leftMargin + lp.rightMargin : lp.topMargin + lp.bottomMargin;
|
||||||
|
|
||||||
int resultSize = 0;
|
int resultSize = 0;
|
||||||
int resultMode = 0;
|
int resultMode = MeasureSpec.UNSPECIFIED;
|
||||||
|
|
||||||
int measureLength = Math.max(0, parentLength - margins);
|
int measureLength = Math.max(0, parentLength - margins);
|
||||||
int childLength = horizontal ? lp.width : lp.height;
|
int childLength = horizontal ? lp.width : lp.height;
|
||||||
@@ -285,14 +364,12 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
|||||||
if (childLength >= 0) {
|
if (childLength >= 0) {
|
||||||
if (parentSpecMode != MeasureSpec.UNSPECIFIED) {
|
if (parentSpecMode != MeasureSpec.UNSPECIFIED) {
|
||||||
resultSize = Math.min(parentLength, childLength);
|
resultSize = Math.min(parentLength, childLength);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
resultSize = childLength;
|
resultSize = childLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
resultMode = MeasureSpec.EXACTLY;
|
resultMode = MeasureSpec.EXACTLY;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
switch (parentSpecMode) {
|
switch (parentSpecMode) {
|
||||||
// Parent has imposed an exact size on us
|
// Parent has imposed an exact size on us
|
||||||
case MeasureSpec.EXACTLY:
|
case MeasureSpec.EXACTLY:
|
||||||
@@ -302,8 +379,7 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
|
|||||||
if (horizontal) {
|
if (horizontal) {
|
||||||
final int horizontalGravity = Gravity.getAbsoluteGravity(gravity, view.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;
|
final int horizontalGravity = Gravity.getAbsoluteGravity(gravity, view.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;
|
||||||
stretched = horizontalGravity == Gravity.FILL_HORIZONTAL;
|
stretched = horizontalGravity == Gravity.FILL_HORIZONTAL;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
|
final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
|
||||||
stretched = verticalGravity == Gravity.FILL_VERTICAL;
|
stretched = verticalGravity == Gravity.FILL_VERTICAL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public class ContentLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
CommonLayoutParams.adjustChildrenLayoutParams(this, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
int measureWidth = 0;
|
int measureWidth = 0;
|
||||||
int measureHeight = 0;
|
int measureHeight = 0;
|
||||||
@@ -29,7 +30,6 @@ public class ContentLayout extends LayoutBase {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonLayoutParams.updateChildLayoutParams(child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
CommonLayoutParams.measureChild(child, widthMeasureSpec, heightMeasureSpec);
|
CommonLayoutParams.measureChild(child, widthMeasureSpec, heightMeasureSpec);
|
||||||
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
||||||
final int childMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
final int childMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
||||||
@@ -54,7 +54,6 @@ public class ContentLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
|
|
||||||
int paddingLeft = this.getPaddingLeft();
|
int paddingLeft = this.getPaddingLeft();
|
||||||
int paddingRight = this.getPaddingRight();
|
int paddingRight = this.getPaddingRight();
|
||||||
int paddingTop = this.getPaddingTop();
|
int paddingTop = this.getPaddingTop();
|
||||||
@@ -75,5 +74,7 @@ public class ContentLayout extends LayoutBase {
|
|||||||
|
|
||||||
CommonLayoutParams.layoutChild(child, childLeft, childTop, childRight, childBottom);
|
CommonLayoutParams.layoutChild(child, childLeft, childTop, childRight, childBottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CommonLayoutParams.restoreOriginalParams(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public class DockLayout extends LayoutBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
CommonLayoutParams.adjustChildrenLayoutParams(this, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
int measureWidth = 0;
|
int measureWidth = 0;
|
||||||
int measureHeight = 0;
|
int measureHeight = 0;
|
||||||
@@ -64,7 +65,6 @@ public class DockLayout extends LayoutBase {
|
|||||||
childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(remainingHeight, heightMode == MeasureSpec.EXACTLY ? MeasureSpec.AT_MOST : heightMode);
|
childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(remainingHeight, heightMode == MeasureSpec.EXACTLY ? MeasureSpec.AT_MOST : heightMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonLayoutParams.updateChildLayoutParams(child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
CommonLayoutParams.measureChild(child, childWidthMeasureSpec, childHeightMeasureSpec);
|
CommonLayoutParams.measureChild(child, childWidthMeasureSpec, childHeightMeasureSpec);
|
||||||
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
||||||
final int childMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
final int childMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
||||||
@@ -107,7 +107,6 @@ public class DockLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
|
|
||||||
int childLeft = this.getPaddingLeft();
|
int childLeft = this.getPaddingLeft();
|
||||||
int childTop = this.getPaddingTop();
|
int childTop = this.getPaddingTop();
|
||||||
|
|
||||||
@@ -173,5 +172,7 @@ public class DockLayout extends LayoutBase {
|
|||||||
if (childToStretch != null) {
|
if (childToStretch != null) {
|
||||||
CommonLayoutParams.layoutChild(childToStretch, x, y, x + remainingWidth, y + remainingHeight);
|
CommonLayoutParams.layoutChild(childToStretch, x, y, x + remainingWidth, y + remainingHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CommonLayoutParams.restoreOriginalParams(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -232,6 +232,7 @@ public class GridLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
CommonLayoutParams.adjustChildrenLayoutParams(this, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
int measureWidth = 0;
|
int measureWidth = 0;
|
||||||
int measureHeight = 0;
|
int measureHeight = 0;
|
||||||
@@ -251,7 +252,7 @@ public class GridLayout extends LayoutBase {
|
|||||||
this.helper.width = width - horizontalPadding;
|
this.helper.width = width - horizontalPadding;
|
||||||
this.helper.height = height - verticalPadding;
|
this.helper.height = height - verticalPadding;
|
||||||
|
|
||||||
int gravity = getGravity(this);
|
int gravity = LayoutBase.getGravity(this);
|
||||||
int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
|
int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
|
||||||
final int layoutDirection = this.getLayoutDirection();
|
final int layoutDirection = this.getLayoutDirection();
|
||||||
final int horizontalGravity = Gravity.getAbsoluteGravity(gravity, layoutDirection) & Gravity.HORIZONTAL_GRAVITY_MASK;
|
final int horizontalGravity = Gravity.getAbsoluteGravity(gravity, layoutDirection) & Gravity.HORIZONTAL_GRAVITY_MASK;
|
||||||
@@ -272,7 +273,6 @@ public class GridLayout extends LayoutBase {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonLayoutParams.updateChildLayoutParams(child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
MeasureSpecs measureSpecs = this.map.get(child);
|
MeasureSpecs measureSpecs = this.map.get(child);
|
||||||
this.updateMeasureSpecs(child, measureSpecs);
|
this.updateMeasureSpecs(child, measureSpecs);
|
||||||
this.helper.addMeasureSpec(measureSpecs);
|
this.helper.addMeasureSpec(measureSpecs);
|
||||||
@@ -296,7 +296,6 @@ public class GridLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
|
|
||||||
int paddingLeft = this.getPaddingLeft();
|
int paddingLeft = this.getPaddingLeft();
|
||||||
int paddingTop = this.getPaddingTop();
|
int paddingTop = this.getPaddingTop();
|
||||||
|
|
||||||
@@ -356,6 +355,8 @@ public class GridLayout extends LayoutBase {
|
|||||||
CommonLayoutParams.layoutChild(measureSpec.child, childLeft, childTop, childRight, childBottom);
|
CommonLayoutParams.layoutChild(measureSpec.child, childLeft, childTop, childRight, childBottom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CommonLayoutParams.restoreOriginalParams(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ public class HorizontalScrollView extends android.widget.HorizontalScrollView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
CommonLayoutParams.adjustChildrenLayoutParams(this, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
// Don't call measure because it will measure content twice.
|
// Don't call measure because it will measure content twice.
|
||||||
// ScrollView is expected to have single child so we measure only the first child.
|
// ScrollView is expected to have single child so we measure only the first child.
|
||||||
View child = this.getChildCount() > 0 ? this.getChildAt(0) : null;
|
View child = this.getChildCount() > 0 ? this.getChildAt(0) : null;
|
||||||
@@ -74,7 +76,6 @@ public class HorizontalScrollView extends android.widget.HorizontalScrollView {
|
|||||||
this.contentMeasuredHeight = 0;
|
this.contentMeasuredHeight = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
CommonLayoutParams.updateChildLayoutParams(child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
CommonLayoutParams.measureChild(child, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), heightMeasureSpec);
|
CommonLayoutParams.measureChild(child, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), heightMeasureSpec);
|
||||||
this.contentMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
this.contentMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
||||||
this.contentMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
this.contentMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
||||||
@@ -147,6 +148,7 @@ public class HorizontalScrollView extends android.widget.HorizontalScrollView {
|
|||||||
|
|
||||||
// Calling this with the present values causes it to re-claim them
|
// Calling this with the present values causes it to re-claim them
|
||||||
this.scrollTo(scrollX, scrollY);
|
this.scrollTo(scrollX, scrollY);
|
||||||
|
CommonLayoutParams.restoreOriginalParams(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ public class StackLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
CommonLayoutParams.adjustChildrenLayoutParams(this, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
int childState = 0;
|
int childState = 0;
|
||||||
int measureWidth = 0;
|
int measureWidth = 0;
|
||||||
int measureHeight = 0;
|
int measureHeight = 0;
|
||||||
@@ -77,7 +79,6 @@ public class StackLayout extends LayoutBase {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonLayoutParams.updateChildLayoutParams(child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
if (isVertical) {
|
if (isVertical) {
|
||||||
CommonLayoutParams.measureChild(child, childMeasureSpec, MeasureSpec.makeMeasureSpec(remainingLength, measureSpecMode));
|
CommonLayoutParams.measureChild(child, childMeasureSpec, MeasureSpec.makeMeasureSpec(remainingLength, measureSpecMode));
|
||||||
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
||||||
@@ -118,13 +119,14 @@ public class StackLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
|
|
||||||
if (this._orientation == Orientation.vertical) {
|
if (this._orientation == Orientation.vertical) {
|
||||||
this.layoutVertical(l, t, r, b);
|
this.layoutVertical(l, t, r, b);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.layoutHorizontal(l, t, r, b);
|
this.layoutHorizontal(l, t, r, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CommonLayoutParams.restoreOriginalParams(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void layoutVertical(int left, int top, int right, int bottom) {
|
private void layoutVertical(int left, int top, int right, int bottom) {
|
||||||
@@ -138,7 +140,7 @@ public class StackLayout extends LayoutBase {
|
|||||||
int childLeft = paddingLeft;
|
int childLeft = paddingLeft;
|
||||||
int childRight = right - left - paddingRight;
|
int childRight = right - left - paddingRight;
|
||||||
|
|
||||||
int gravity = getGravity(this);
|
int gravity = LayoutBase.getGravity(this);
|
||||||
final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
|
final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
|
||||||
|
|
||||||
switch (verticalGravity) {
|
switch (verticalGravity) {
|
||||||
@@ -164,8 +166,7 @@ public class StackLayout extends LayoutBase {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonLayoutParams childLayoutParams = (CommonLayoutParams)child.getLayoutParams();
|
int childHeight = CommonLayoutParams.getDesiredHeight(child);
|
||||||
int childHeight = child.getMeasuredHeight() + childLayoutParams.topMargin + childLayoutParams.bottomMargin;
|
|
||||||
CommonLayoutParams.layoutChild(child, childLeft, childTop, childRight, childTop + childHeight);
|
CommonLayoutParams.layoutChild(child, childLeft, childTop, childRight, childTop + childHeight);
|
||||||
childTop += childHeight;
|
childTop += childHeight;
|
||||||
}
|
}
|
||||||
@@ -183,7 +184,7 @@ public class StackLayout extends LayoutBase {
|
|||||||
int childLeft = 0;
|
int childLeft = 0;
|
||||||
int childBottom = bottom - top - paddingBottom;
|
int childBottom = bottom - top - paddingBottom;
|
||||||
|
|
||||||
int gravity = getGravity(this);
|
int gravity = LayoutBase.getGravity(this);
|
||||||
final int horizontalGravity = Gravity.getAbsoluteGravity(gravity, this.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;
|
final int horizontalGravity = Gravity.getAbsoluteGravity(gravity, this.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;
|
||||||
|
|
||||||
switch (horizontalGravity) {
|
switch (horizontalGravity) {
|
||||||
@@ -209,8 +210,7 @@ public class StackLayout extends LayoutBase {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonLayoutParams childLayoutParams = (CommonLayoutParams)child.getLayoutParams();
|
int childWidth = CommonLayoutParams.getDesiredWidth(child);
|
||||||
int childWidth = child.getMeasuredWidth() + childLayoutParams.leftMargin + childLayoutParams.rightMargin;
|
|
||||||
CommonLayoutParams.layoutChild(child, childLeft, childTop, childLeft + childWidth, childBottom);
|
CommonLayoutParams.layoutChild(child, childLeft, childTop, childLeft + childWidth, childBottom);
|
||||||
childLeft += childWidth;
|
childLeft += childWidth;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ class TabStrip extends LinearLayout {
|
|||||||
|
|
||||||
TabStrip(Context context, AttributeSet attrs) {
|
TabStrip(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
|
||||||
setWillNotDraw(false);
|
setWillNotDraw(false);
|
||||||
|
|
||||||
final float density = getResources().getDisplayMetrics().density;
|
final float density = getResources().getDisplayMetrics().density;
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ public class VerticalScrollView extends ScrollView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
CommonLayoutParams.adjustChildrenLayoutParams(this, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
// Don't call measure because it will measure content twice.
|
// Don't call measure because it will measure content twice.
|
||||||
// ScrollView is expected to have single child so we measure only the first child.
|
// ScrollView is expected to have single child so we measure only the first child.
|
||||||
View child = this.getChildCount() > 0 ? this.getChildAt(0) : null;
|
View child = this.getChildCount() > 0 ? this.getChildAt(0) : null;
|
||||||
@@ -75,7 +77,6 @@ public class VerticalScrollView extends ScrollView {
|
|||||||
this.setPadding(0, 0, 0, 0);
|
this.setPadding(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
CommonLayoutParams.updateChildLayoutParams(child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
CommonLayoutParams.measureChild(child, widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
|
CommonLayoutParams.measureChild(child, widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
|
||||||
this.contentMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
this.contentMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
||||||
this.contentMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
this.contentMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
||||||
@@ -144,6 +145,8 @@ public class VerticalScrollView extends ScrollView {
|
|||||||
|
|
||||||
// Calling this with the present values causes it to re-claim them
|
// Calling this with the present values causes it to re-claim them
|
||||||
this.scrollTo(scrollX, scrollY);
|
this.scrollTo(scrollX, scrollY);
|
||||||
|
|
||||||
|
CommonLayoutParams.restoreOriginalParams(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public class WrapLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
CommonLayoutParams.adjustChildrenLayoutParams(this, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
int measureWidth = 0;
|
int measureWidth = 0;
|
||||||
int measureHeight = 0;
|
int measureHeight = 0;
|
||||||
@@ -92,7 +93,6 @@ public class WrapLayout extends LayoutBase {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonLayoutParams.updateChildLayoutParams(child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
CommonLayoutParams.measureChild(child, childWidthMeasureSpec, childHeightMeasureSpec);
|
CommonLayoutParams.measureChild(child, childWidthMeasureSpec, childHeightMeasureSpec);
|
||||||
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
final int childMeasuredWidth = CommonLayoutParams.getDesiredWidth(child);
|
||||||
final int childMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
final int childMeasuredHeight = CommonLayoutParams.getDesiredHeight(child);
|
||||||
@@ -162,7 +162,6 @@ public class WrapLayout extends LayoutBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
|
|
||||||
boolean isVertical = this._orientation == Orientation.vertical;
|
boolean isVertical = this._orientation == Orientation.vertical;
|
||||||
int paddingLeft = this.getPaddingLeft();
|
int paddingLeft = this.getPaddingLeft();
|
||||||
int paddingRight = this.getPaddingRight();
|
int paddingRight = this.getPaddingRight();
|
||||||
@@ -187,7 +186,6 @@ public class WrapLayout extends LayoutBase {
|
|||||||
|
|
||||||
int length = this._lengths.get(rowOrColumn);
|
int length = this._lengths.get(rowOrColumn);
|
||||||
if (isVertical) {
|
if (isVertical) {
|
||||||
|
|
||||||
childWidth = length;
|
childWidth = length;
|
||||||
childHeight = this._itemHeight > 0 ? this._itemHeight : childHeight;
|
childHeight = this._itemHeight > 0 ? this._itemHeight : childHeight;
|
||||||
if (childTop + childHeight > childrenLength) {
|
if (childTop + childHeight > childrenLength) {
|
||||||
@@ -233,5 +231,7 @@ public class WrapLayout extends LayoutBase {
|
|||||||
childLeft += childWidth;
|
childLeft += childWidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CommonLayoutParams.restoreOriginalParams(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,23 +65,14 @@
|
|||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||||
@@ -92,5 +83,6 @@
|
|||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" exported="" name="support-v4-23.0.1" level="project" />
|
<orderEntry type="library" exported="" name="support-v4-23.0.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="support-annotations-23.0.1" level="project" />
|
<orderEntry type="library" exported="" name="support-annotations-23.0.1" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="android-android-17" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
Reference in New Issue
Block a user