我有具有子视图的 ScrollView
布局(或其他不重要的布局类型)。而这个父布局有 paddingLeft
和 paddingRight
。我想为每个孩子设置这个填充,但有时我有例外,我希望那个孩子完全到达显示器的边缘(例如带有背景颜色的 TextView
)。有什么办法可以让这种情况发生吗?我不想分别为每个孩子设置填充。
答案 0 :(得分:0)
您告诉我们您想要什么:“有时子级不应该尊重其父级填充”,因此特殊行为应该发生在子级上。
解决方案是 EXTEND Child 的主视图,它默认选择其 MARGIN,然后创建一个“Child.setNoMargins()”方法,在需要时将它们从自身中删除。
public static class ExtendedTextView extends TextView {
private boolean mHasNoMargins = false;
public ExtendedTextView(Context context) {
super(context);
}
public void setNoMargins() {
mHasNoMargins = true;
if (!isInLayout() && isAttachedToWindow()) requestLayout();
}
@Override
public void setLayoutParams(ViewGroup.LayoutParams params) {
if (!mHasNoMargins && (params instanceof ViewGroup.MarginLayoutParams)) {
((ViewGroup.MarginLayoutParams)params).setMarginStart(20);
((ViewGroup.MarginLayoutParams)params).setMarginEnd(20);
}
super.setLayoutParams(params);
}
}
通过这种方式,所有创建的“ExtendedTextView”都有默认的左/右边距,直到您调用“setNoMargins()”。 显然,我的代码仅在父 ViewGroup 支持具有边距(其中大部分)的 LayoutParams 时才有效。