以编程方式向 FrameLayout 添加填充,而无需移动带有 ScrollView 内容的内部 Fragment
Add padding to FrameLayout programmatically without moving inner Fragment with ScrollView content
我需要在延迟一段时间后以编程方式向 FrameLayout
中的 Activity
添加底部填充或边距。问题是它是 Fragments
和 ScrollView
的容器。当我将 bottom padding/margin 设置为它时,内部内容向上滚动。 Fragment
内容的顶部不再可见。
当我将底部填充设置为 ScrollView
内容时效果很好,但我想避免这种情况并在 Activity
中处理它而无需修改每个 Fragment
.
我试过了:
- 将底部 margin/padding 设置为
FrameLayout
- 将
View
放在LinearLayout
中FrameLayout
的底部,
- 将
android:clipToPadding="false"
设置为 ScrollView
。
每次都是同样的行为。有什么想法吗?
我自己想出来的。这似乎是 setVerticalFadingEdgeEnabled(true)
与 setFadingEdgeLength()
在 ScrollView
上一起使用时出现的问题。
这个 hack 解决了这个问题:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
setVerticalFadingEdgeEnabled(false);
super.onSizeChanged(w, h, oldw, oldh);
setVerticalFadingEdgeEnabled(true);
}
如果您还有问题可以使用:
android:descendantFocusability="blocksDescendants"
在您的子 ScrollView 中。
我需要在延迟一段时间后以编程方式向 FrameLayout
中的 Activity
添加底部填充或边距。问题是它是 Fragments
和 ScrollView
的容器。当我将 bottom padding/margin 设置为它时,内部内容向上滚动。 Fragment
内容的顶部不再可见。
当我将底部填充设置为 ScrollView
内容时效果很好,但我想避免这种情况并在 Activity
中处理它而无需修改每个 Fragment
.
我试过了:
- 将底部 margin/padding 设置为
FrameLayout
- 将
View
放在LinearLayout
中FrameLayout
的底部, - 将
android:clipToPadding="false"
设置为ScrollView
。
每次都是同样的行为。有什么想法吗?
我自己想出来的。这似乎是 setVerticalFadingEdgeEnabled(true)
与 setFadingEdgeLength()
在 ScrollView
上一起使用时出现的问题。
这个 hack 解决了这个问题:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
setVerticalFadingEdgeEnabled(false);
super.onSizeChanged(w, h, oldw, oldh);
setVerticalFadingEdgeEnabled(true);
}
如果您还有问题可以使用:
android:descendantFocusability="blocksDescendants"
在您的子 ScrollView 中。