Android 如何忽略父视图的填充?
我有Android 如何忽略父视图的填充?,android,android-layout,Android,Android Layout,我有ScrollViewlayout(或其他不重要的布局类型),它有子视图。这个父布局有paddingLeft和paddingRight。我希望为每个子项设置此填充,但有时我会出现例外,希望该子项完全到达显示边缘(例如,背景色为TextView)。有没有办法让这种情况发生?我不想为每个孩子单独设置填充物。你告诉了我们你想要什么:“有时候孩子不应该尊重父母的填充物”,所以这种特殊行为应该发生在孩子身上 解决方案是扩展Child的主视图,默认情况下在主视图中选择边距,然后创建一个“Child.set
ScrollView
layout(或其他不重要的布局类型),它有子视图。这个父布局有paddingLeft
和paddingRight
。我希望为每个子项设置此填充,但有时我会出现例外,希望该子项完全到达显示边缘(例如,背景色为TextView
)。有没有办法让这种情况发生?我不想为每个孩子单独设置填充物。你告诉了我们你想要什么:“有时候孩子不应该尊重父母的填充物”,所以这种特殊行为应该发生在孩子身上
解决方案是扩展Child的主视图,默认情况下在主视图中选择边距,然后创建一个“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()”。
很明显,我的代码只有在父视图组支持有边距的LayoutParams(大多数)时才起作用。我认为这是不可能的。可能有一些黑客解决方案。您需要在子视图上设置边距。