安卓子视图忽略父容器的填充(padding)问题

26

我有许多布局,它们具有不同的ViewGroup根元素(LinearLayouts、RelativeLayouts等)。这些视图都按我的预期工作,但现在我尝试添加一个顶部导航栏。问题是根可以有不同的填充,如果我在每个这些布局中简单地包含我的布局,则导航栏的宽度受父填充的限制。我希望此导航栏忽略根的左/右/上填充,并完全覆盖布局的顶部,占满整个宽度。是否有什么方法可以在导航栏的布局内实现此目标,或者我只能修改所有现有布局以适应此要求?

2个回答

45
虽然这一开始看起来似乎是个相当糟糕的主意,但你也许可以通过将父ViewGroup的clipToPadding属性设置为false,然后在子视图上设置负边距来实现你想要的效果。
今天测试了一下,没有起作用,不得不在这个解决方案中添加android:clipChildren="false"。
示例:
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:background="#EEE"
    android:clipToPadding="false">
    <TextView  
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        android:background="#333"
        android:layout_marginLeft="-10dp"
        android:layout_marginRight="-10dp"
        android:layout_marginTop="-10dp"/>
</LinearLayout>

上面的例子是有效的,但我建议你应该把顶部导航栏放在那些包含你想避免的填充的ViewGroup之外。

1
你不喜欢这个,如果你有一个动态填充怎么办?你会在资源文件中添加每个值相同但为负的值吗? - narancs

3

为什么需要更改所有布局?如果只有导航栏需要忽略填充,您可以将导航栏从其当前父布局中移出,然后将两个布局放入另一个没有填充的布局中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接