gpt4 book ai didi

android - 如何使 FrameLayout 填充其父级的高度以便整个页面一起滚动?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:59:15 25 4
gpt4 key购买 nike

我有一个 FrameLayout,它通过点击 TabWidget 中的选项卡来加载 Fragments。我无法弄清楚如何使 FrameLayout 的高度与其内容一样高,以便包含 ScrollView 的整体将作为一个整体滚动而不是单独滚动查看。

这是此 Fragment 结构的可视化示例:

enter image description here

如您所见,Frame Layout Visible Height 仅显示 Fragment 的一行,而实际上有几行。我可以在 FrameLayout 中滚动以查看其他行,就像现在一样,但这不是我想要的。 FrameLayout 由包含 GridViewLinearLayout 组成,layout_height 设置为 wrap_content.

我尝试将 FrameLayout 的高度硬编码为 500dp 之类的值,除了不再动态调整大小外,效果很好。每次将新图像加载到内部内容时,我是否需要以编程方式调整 FrameLayout 的大小?是否有我可以设置的布局属性,以便它可以拉伸(stretch)其高度以匹配其内部内容?

这是我的布局 xml 文件:

<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:orientation="vertical"

android:layout_width="fill_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="200dp">
<!-- CONTAINS USER INFO AND STATS -->
</RelativeLayout>
<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffff">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:weightSum="2">
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</FrameLayout>
</LinearLayout>
</android.support.v4.app.FragmentTabHost>
</LinearLayout>
</ScrollView>

谢谢!


因为我要为此设置赏金,所以我想我应该分享我到目前为止的发现。

在缩略图中,onSuccess 加载每张图片时,我在 GridLayout 中调用一个函数来保存图片,该函数计算图片并设置高度GridLayout。这很好用,尽管看起来效率有点低。

我正在做的是设置 GridLayout 高度,然后调用 requestLayoutinvalidate 及其父级。这有效,但不适用于图像加载。如果我转到另一个选项卡并返回到缩略图,它就会起作用,这很奇怪。这让我觉得我没有在正确的时间或正确的对象上进行更新。

无论如何,就是这样。有谁知道如何扩展 GridLayout 的高度以容纳其内容(而不是滚动),这样我就可以滚动整个页面(包括顶部)?


我还应该添加 GridView 布局:

<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid"
android:stretchMode="columnWidth"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false"
android:fastScrollAlwaysVisible="false"
android:fastScrollEnabled="false"
android:numColumns="3"
android:choiceMode="none">
</GridView>

最佳答案

我遇到过类似情况,但我使用的是 ListView 而不是 GridView。当您每次添加项目或调用 notifyDataSetChanged() 时都必须动态设置高度时,您就处于正确的位置。

此代码适用于每行具有不同高度的 ListView

private void setListViewHeightBasedOnChildren(MyQueueAdapter listAdapter) {

int desiredWidth = MeasureSpec.makeMeasureSpec(
mListView.getWidth(), MeasureSpec.AT_MOST);
int totalHeight = 0;

View view = null;
int i;
for (i = 0; i < listAdapter.getCount(); i++) {
view = listAdapter.getView(i, view, mListView);

view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);

totalHeight += view.getMeasuredHeight();
}

ViewGroup.LayoutParams params = mListView.getLayoutParams();
params.height = heightList
+ (mListView.getDividerHeight() * (listAdapter
.getCount() + 3));

heightListComplete = params.height;
mListView.setLayoutParams(params);

}

您需要根据需要修改此代码,您不需要循环,因为在您的情况下每行的高度是静态的。如果您需要更多帮助,请告诉我。

备选方案

如果您知道 View 的 dp 高度,您可以轻松地将 dp 转换为 px,并根据行数设置 gridview 的高度。

关于android - 如何使 FrameLayout 填充其父级的高度以便整个页面一起滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com