Android:clipToPadding在LinearLayout中忽略子ListView?
我有一个很奇怪的问题,我希望有人能解释清楚。我不确定这是不是安卓的bug 我在片段中显示了以下布局:Android:clipToPadding在LinearLayout中忽略子ListView?,android,android-layout,listview,fragment,android-linearlayout,Android,Android Layout,Listview,Fragment,Android Linearlayout,我有一个很奇怪的问题,我希望有人能解释清楚。我不确定这是不是安卓的bug 我在片段中显示了以下布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@color/grey"
android:orientation="vertical"
tools:context="com.testapp.test.TestFragment"
>
<ListView
android:id="@+id/data_listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</ListView>
<TextView
android:id="@+id/section_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
即使我已将CliptPadding设置为false,我的ListView仍将剪切到LinearLayout的填充
解决方法是从LinearLayout中删除顶部和底部填充,并将其添加到ListView中,同时在ListView中将clipToPadding设置为false,但我不希望这样做,因为在特殊情况下,我可能希望隐藏ListView以在保留填充的同时显示其下方(以及屏幕外)的TextView,并希望避免在布局中增加额外的复杂性
更新:
通过一些测试,我发现了一些有趣的东西。在父LinearLayout上设置CliptPadding没有效果,因为ListView本身不会在父LinearLayout内滚动,而是ListView内的子对象在ListView内滚动!在使用调试工具进行了一些调查之后,现在似乎很明显。子对象仅限于ListView本身内部的空间,并且由于ListView设置在LinearLayout的填充内,并且不移动,因此子对象在该空间内滚动
这是我画的ASCII图:
--------- <LinearLayout>
| |
| | [ Padding ]
| |
| ----- | <ListView>
| | c | |
| | o | |
| | n | | Content scrolls
| | t | | within ListView
| | e | | ListView doesn't move
| | n | |
| | t | |
| ----- | </ListView>
| |
| | [ Padding ]
| |
--------- </LinearLayout>
-----------
| |
||[填充]
| |
| ----- |
||c||
||o||
|| n | |内容卷轴
|| t | |在ListView中
|| e | |列表视图不移动
||n||
|| t||
| ----- |
| |
||[填充]
| |
---------
西蒙·马奎斯的解决方案和我的工作一样。这不是我想要的解决方案,因为现在我需要为我的线性布局的每个孩子添加额外的填充,而是一个解决方案,所以这是公认的答案。感谢Simon的输入。ListView应该具有CliptPadding属性而不是LinearLayout(并且它还应该包含填充,而不是带有scrollbarStyle=“outsideOverlay”属性的LinearLayout,以便滚动条可以放在应用程序的边距中)。有关更多信息,请参阅源代码:
<ListView
…
android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay" />
ListView应该具有CliptPadding属性而不是LinearLayout(并且它还应该包含填充而不是带有scrollbarStyle=“outsideOverlay”属性的LinearLayout,以便可以将滚动条放置在应用程序的边距中)。有关更多信息,请参阅来源:
<ListView
…
android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay" />
不,对不起。如前所述,我已经尝试设置listView和LinearLayout的CliptPadding属性。实际上,当与listView一起使用时,它非常有效。官方示例代码,我已经尝试过多次。据我所知,您希望我删除LinearLayout中的填充,并将其放入ListView,就像我的解决方法一样?是的,那确实有效。。。但这是一种变通办法。这意味着我也需要在ProgressBar中添加填充,以获得所需的外观,这会给布局增加额外的复杂性,而这并不需要在LinearLayouthure中使用CliptPadding属性,但是,您可以将ProgressBar和TextView包装在一个有填充的容器中。这是真的。。。但这仍然是一项工作。它在clipToPadding周围工作,而不是在父LinearLayout中正常工作。我正在寻找一种方法来解决这个问题,找到一个解决方案而不增加额外的复杂度,或者确认确实存在一个bug。也许是因为我忽略了一些小事情,所以它不起作用。谢谢你的推荐。不,对不起。如前所述,我已经尝试设置listView和LinearLayout的CliptPadding属性。实际上,当与listView一起使用时,它非常有效。官方示例代码,我已经尝试过多次。据我所知,您希望我删除LinearLayout中的填充,并将其放入ListView,就像我的解决方法一样?是的,那确实有效。。。但这是一种变通办法。这意味着我也需要在ProgressBar中添加填充,以获得所需的外观,这会给布局增加额外的复杂性,而这并不需要在LinearLayouthure中使用CliptPadding属性,但是,您可以将ProgressBar和TextView包装在一个有填充的容器中。这是真的。。。但这仍然是一项工作。它在clipToPadding周围工作,而不是在父LinearLayout中正常工作。我正在寻找一种方法来解决这个问题,找到一个解决方案而不增加额外的复杂度,或者确认确实存在一个bug。也许是因为我忽略了一些小事情,所以它不起作用。无论如何,谢谢你的推荐。