Add paddings and improved margins

This commit is contained in:
Daniel Panero
2024-11-15 22:17:07 +01:00
committed by Mis012
parent 13ed9d76bb
commit fb6565e535
10 changed files with 169 additions and 55 deletions

View File

@@ -834,6 +834,11 @@ public class View implements Drawable.Callback {
private int minWidth = 0;
private int minHeight = 0;
protected int paddingLeft = 0;
protected int paddingTop = 0;
protected int paddingRight = 0;
protected int paddingBottom = 0;
public static final Property<View, Float> TRANSLATION_X = new Property<View, Float>(Float.class, "translationX") {
@Override
public Float get(View object) {
@@ -896,6 +901,47 @@ public class View implements Drawable.Callback {
if (a.hasValue(com.android.internal.R.styleable.View_minHeight)) {
minHeight = a.getDimensionPixelSize(com.android.internal.R.styleable.View_minHeight, 0);
}
int padding = a.getDimensionPixelSize(com.android.internal.R.styleable.View_padding, -1);
int paddingVertical = a.getDimensionPixelSize(com.android.internal.R.styleable.View_paddingVertical, -1);
int paddingHorizontal = a.getDimensionPixelSize(com.android.internal.R.styleable.View_paddingHorizontal, -1);
int paddingStart = a.getDimensionPixelSize(com.android.internal.R.styleable.View_paddingStart, -1);
int paddingEnd = a.getDimensionPixelSize(com.android.internal.R.styleable.View_paddingEnd, -1);
if(padding >= 0) {
paddingLeft = padding;
paddingTop = padding;
paddingRight = padding;
paddingBottom = padding;
} else {
if(paddingVertical >= 0) {
paddingTop = paddingVertical;
paddingBottom = paddingVertical;
} else {
paddingTop = a.getDimensionPixelSize(com.android.internal.R.styleable.View_paddingTop, 0);
paddingBottom = a.getDimensionPixelSize(com.android.internal.R.styleable.View_paddingBottom, 0);
}
if(paddingHorizontal >= 0) {
paddingLeft = paddingHorizontal;
paddingRight = paddingHorizontal;
} else {
paddingLeft = a.getDimensionPixelSize(com.android.internal.R.styleable.View_paddingLeft, 0);
paddingRight = a.getDimensionPixelSize(com.android.internal.R.styleable.View_paddingRight, 0);
if(paddingStart >= 0) {
paddingLeft = paddingStart;
}
if(paddingEnd >= 0) {
paddingRight = paddingEnd;
}
}
}
native_setPadding(widget, paddingLeft, paddingTop, paddingRight, paddingBottom);
}
onCreateDrawableState(0);
}
@@ -1105,7 +1151,16 @@ public class View implements Drawable.Callback {
}
this.visibility = visibility;
}
public void setPadding(int left, int top, int right, int bottom) {}
public void setPadding(int left, int top, int right, int bottom) {
paddingLeft = left;
paddingTop = top;
paddingRight = right;
paddingBottom = bottom;
native_setPadding(widget, left, top, right, bottom);
}
public native void native_setPadding(long widget, int left, int top, int right, int bottom);
public void setBackgroundResource(int resid) {
setBackgroundDrawable(resid == 0 ? null : getResources().getDrawable(resid));
}
@@ -1149,27 +1204,27 @@ public class View implements Drawable.Callback {
}
public int getPaddingLeft() {
return 0;
return paddingLeft;
}
public int getPaddingRight() {
return 0;
return paddingRight;
}
public int getPaddingTop() {
return 0;
return paddingTop;
}
public int getPaddingBottom() {
return 0;
return paddingBottom;
}
public int getPaddingStart() {
return 0;
return paddingLeft;
}
public int getPaddingEnd() {
return 0;
return paddingRight;
}
public void postInvalidate() {

View File

@@ -261,20 +261,16 @@ public class ViewGroup extends View implements ViewParent, ViewManager {
int parentWidthMeasureSpec, int widthUsed,
int parentHeightMeasureSpec, int heightUsed) {
final MarginLayoutParams lp = (MarginLayoutParams)child.getLayoutParams();
final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec,
/*mPaddingLeft + mPaddingRight +*/ lp.leftMargin + lp.rightMargin + widthUsed, lp.width);
final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec,
/*mPaddingTop + mPaddingBottom +*/ lp.topMargin + lp.bottomMargin + heightUsed, lp.height);
final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec, paddingLeft + paddingRight + lp.leftMargin + lp.rightMargin + widthUsed, lp.width);
final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec, paddingTop + paddingBottom + lp.topMargin + lp.bottomMargin + heightUsed, lp.height);
child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
}
protected void measureChild(View child, int parentWidthMeasureSpec,
int parentHeightMeasureSpec) {
final LayoutParams lp = child.getLayoutParams();
final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec,
/*mPaddingLeft + mPaddingRight*/ 0, lp.width);
final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec,
/*mPaddingTop + mPaddingBottom*/ 0, lp.height);
final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec, paddingLeft + paddingRight, lp.width);
final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec, paddingTop + paddingBottom, lp.height);
child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
}
@@ -453,19 +449,50 @@ public class ViewGroup extends View implements ViewParent, ViewManager {
public MarginLayoutParams(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
TypedArray a = context.obtainStyledAttributes(attributeSet, R.styleable.ViewGroup_MarginLayout);
TypedArray a = context.obtainStyledAttributes(attributeSet, com.android.internal.R.styleable.ViewGroup_MarginLayout);
int margin = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_margin, -1);
int marginVertical = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_marginVertical, -1);
int marginHorizontal = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_marginHorizontal, -1);
int marginStart = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_marginStart, -1);
int marginEnd = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_marginEnd, -1);
leftMargin = 0;
topMargin = 0;
rightMargin = 0;
bottomMargin = 0;
if (margin >= 0) {
leftMargin = margin;
topMargin = margin;
rightMargin= margin;
bottomMargin = margin;
} else {
leftMargin = a.getDimensionPixelSize(R.styleable.ViewGroup_MarginLayout_layout_marginLeft,0);
rightMargin = a.getDimensionPixelSize(R.styleable.ViewGroup_MarginLayout_layout_marginRight,0);
topMargin = a.getDimensionPixelSize(R.styleable.ViewGroup_MarginLayout_layout_marginTop,0);
bottomMargin = a.getDimensionPixelSize(R.styleable.ViewGroup_MarginLayout_layout_marginBottom,0);
if(marginVertical >= 0){
topMargin = marginVertical;
bottomMargin = marginVertical;
} else {
topMargin = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_marginTop, 0);
bottomMargin = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_marginBottom, 0);
}
if (marginHorizontal >= 0) {
leftMargin = marginHorizontal;
rightMargin = marginHorizontal;
} else {
leftMargin = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_marginLeft, 0);
rightMargin = a.getDimensionPixelSize(com.android.internal.R.styleable.ViewGroup_MarginLayout_layout_marginRight, 0);
if (marginStart >= 0) {
leftMargin = marginStart;
}
if (marginEnd >= 0) {
rightMargin = marginEnd;
}
}
}
a.recycle();