我有一个FrameLayout加载Fragments通过点击一个标签TabWidget.我无法弄清楚如何使高度FrameLayout与其内容一样高,以便整个包含ScrollView将一起滚动而不是单独的滚动视图.
这是这个Fragment结构的一个直观的例子:

正如您所看到的,帧布局可见高度仅显示片段的一行,而实际上有一些.我可以在其中滚动FrameLayout以查看现在的其他行,但这不是我想要的.该FrameLayout由一个LinearLayout包含GridView与他们的layout_heightS设定到wrap_content.
我尝试将其高度硬编码为FrameLayout类似于500dp的东西,除了它不再动态调整大小外,它的效果很好.FrameLayout每次将新图像加载到内部内容中时,是否需要以编程方式调整大小?是否有我可以设置的布局属性,因此它会拉伸其高度以匹配其内部内容?
这是我的布局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>
Run Code Online (Sandbox Code Playgroud)
谢谢!
既然我要为此设置赏金,我想我会分享到目前为止我已经想到的东西.
在缩略图中,onSuccess当每个图像被加载时,我正在调用一个函数,该函数GridLayout包含计算图像的图像并设置图像的高度GridLayout.这很好用,虽然看起来效率有点低.
我在做什么是设置GridLayout高度,然后调用requestLayout,并invalidate在它和它的父(S).这有效,但不是图像加载.奇怪的是,如果我去另一个标签并返回缩略图,它会起作用.这让我觉得我没有在正确的时间或正确的对象上进行更新.
无论如何,那说.有谁知道如何使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>
Run Code Online (Sandbox Code Playgroud)
我也遇到过类似的情况,但我有一个 ListView 而不是 GridView。当您每次添加项目或调用notifyDataSetChanged() 时都必须动态设置高度时,您就处于正确的位置。
此代码适用于每行具有不同高度的列表视图
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);
}
Run Code Online (Sandbox Code Playgroud)
您需要根据您的需要修改此代码,您不需要循环,因为在您的情况下每行的高度是静态的。如果您需要更多帮助,请告诉我。
选择
如果您知道以 dp 为单位的视图高度,则可以轻松地将 dp 以 px 为单位转换,并根据行数设置 gridview 的高度。
| 归档时间: |
|
| 查看次数: |
5468 次 |
| 最近记录: |