Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何忽略父视图的填充?_Android_Android Layout - Fatal编程技术网

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(大多数)时才起作用。

我认为这是不可能的。可能有一些黑客解决方案。您需要在子视图上设置边距。