Android layout logging is now separate METADATA key.

Percent layout is NOT respected when measured with UNSPECIFIED size.
This commit is contained in:
hshristov
2015-10-09 10:35:02 +03:00
parent 6bf55d5cb2
commit 91bb8ce4a5
2 changed files with 49 additions and 31 deletions

View File

@@ -20,7 +20,7 @@ import android.widget.FrameLayout;
*/ */
public class CommonLayoutParams extends FrameLayout.LayoutParams { public class CommonLayoutParams extends FrameLayout.LayoutParams {
static final String tag = "NSLayout"; static final String TAG = "NSLayout";
static int debuggable = -1; static int debuggable = -1;
private static final StringBuilder sb = new StringBuilder(); private static final StringBuilder sb = new StringBuilder();
@@ -154,7 +154,7 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
sb.append(MeasureSpec.toString(widthMeasureSpec)); sb.append(MeasureSpec.toString(widthMeasureSpec));
sb.append(", "); sb.append(", ");
sb.append(MeasureSpec.toString(heightMeasureSpec)); sb.append(MeasureSpec.toString(heightMeasureSpec));
log(tag, sb.toString()); log(TAG, sb.toString());
} }
child.measure(widthMeasureSpec, heightMeasureSpec); child.measure(widthMeasureSpec, heightMeasureSpec);
@@ -174,7 +174,7 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
sb.append(childRight); sb.append(childRight);
sb.append(", "); sb.append(", ");
sb.append(childBottom); sb.append(childBottom);
log(tag, sb.toString()); log(TAG, sb.toString());
} }
child.layout(childLeft, childTop, childRight, childBottom); child.layout(childLeft, childTop, childRight, childBottom);
@@ -188,13 +188,18 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
// Negative means not initialized. // Negative means not initialized.
if(debuggable < 0) { if(debuggable < 0) {
try { try {
Context context = child.getContext(); Context context = child.getContext();
int flags = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).applicationInfo.flags; ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), android.content.pm.PackageManager.GET_META_DATA);
debuggable = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0 ? 1 : 0; android.os.Bundle bundle = ai.metaData;
} Boolean debugLayouts = bundle != null ? bundle.getBoolean("debugLayouts", false) : false;
catch (NameNotFoundException e) { debuggable = debugLayouts ? 1 : 0;
debuggable = 0; } catch (NameNotFoundException e) {
} debuggable = 0;
Log.e(TAG, "Failed to load meta-data, NameNotFound: " + e.getMessage());
} catch (NullPointerException e) {
debuggable = 0;
Log.e(TAG, "Failed to load meta-data, NullPointer: " + e.getMessage());
}
} }
int childWidthMeasureSpec = getMeasureSpec(child, widthMeasureSpec, true); int childWidthMeasureSpec = getMeasureSpec(child, widthMeasureSpec, true);
@@ -209,7 +214,7 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
sb.append(MeasureSpec.toString(childWidthMeasureSpec)); sb.append(MeasureSpec.toString(childWidthMeasureSpec));
sb.append(", "); sb.append(", ");
sb.append(MeasureSpec.toString(childHeightMeasureSpec)); sb.append(MeasureSpec.toString(childHeightMeasureSpec));
log(tag, sb.toString()); log(TAG, sb.toString());
} }
child.measure(childWidthMeasureSpec, childHeightMeasureSpec); child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
@@ -218,25 +223,38 @@ public class CommonLayoutParams extends FrameLayout.LayoutParams {
public static void updateChildLayoutParams(View child, int widthMeasureSpec, int heightMeasureSpec) { public static void updateChildLayoutParams(View child, int widthMeasureSpec, int heightMeasureSpec) {
int availableWidth = MeasureSpec.getSize(widthMeasureSpec); int availableWidth = MeasureSpec.getSize(widthMeasureSpec);
int widthSpec = MeasureSpec.getMode(widthMeasureSpec);
int availableHeight = MeasureSpec.getSize(heightMeasureSpec); int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
int heightSpec = MeasureSpec.getMode(heightMeasureSpec);
CommonLayoutParams lp = (CommonLayoutParams)child.getLayoutParams(); CommonLayoutParams lp = (CommonLayoutParams)child.getLayoutParams();
if (lp.widthPercent > 0) { if (widthSpec != MeasureSpec.UNSPECIFIED) {
lp.width = (int)(availableWidth * lp.widthPercent); if (lp.widthPercent > 0) {
lp.width = (int)(availableWidth * lp.widthPercent);
}
if (lp.leftMarginPercent > 0) {
lp.leftMargin = (int)(availableWidth * lp.leftMarginPercent);
}
if (lp.rightMarginPercent > 0) {
lp.rightMargin = (int)(availableWidth * lp.rightMarginPercent);
}
} }
if (lp.heightPercent > 0) {
lp.height = (int)(availableHeight * lp.heightPercent); if (heightSpec != MeasureSpec.UNSPECIFIED) {
} if (lp.heightPercent > 0) {
if (lp.leftMarginPercent > 0) { lp.height = (int)(availableHeight * lp.heightPercent);
lp.leftMargin = (int)(availableWidth * lp.leftMarginPercent); }
}
if (lp.rightMarginPercent > 0) { if (lp.topMarginPercent > 0) {
lp.rightMargin = (int)(availableWidth * lp.rightMarginPercent); lp.topMargin = (int)(availableHeight * lp.topMarginPercent);
} }
if (lp.topMarginPercent > 0) {
lp.topMargin = (int)(availableHeight * lp.topMarginPercent); if (lp.bottomMarginPercent > 0) {
} lp.bottomMargin = (int)(availableHeight * lp.bottomMarginPercent);
if (lp.bottomMarginPercent > 0) { }
lp.bottomMargin = (int)(availableHeight * lp.bottomMarginPercent);
} }
} }

View File

@@ -99,7 +99,7 @@ public class ImageView extends android.widget.ImageView {
sb.append(", measureHeight: "); sb.append(", measureHeight: ");
sb.append(measureHeight); sb.append(measureHeight);
CommonLayoutParams.log(CommonLayoutParams.tag, sb.toString()); CommonLayoutParams.log(CommonLayoutParams.TAG, sb.toString());
} }
int widthSizeAndState = resolveSizeAndState(measureWidth, widthMeasureSpec, 0); int widthSizeAndState = resolveSizeAndState(measureWidth, widthMeasureSpec, 0);