Dil*_*lip 65 android gridview scrollview
我必须设计布局,使整个布局应该滚动和内部布局我必须在Grid表单中显示相关内容所以我决定使用GridView.但问题是我无法在GridView里面使用ScrollView我已阅读文档(文档也说我们应该也不要GridView在里面使用ScrollView)但是我必须这样做,所以请任何关于此的请给我一些想法.谢谢
den*_*rew 108
除了固有的滚动之外,GridView肯定有好处.例如,一个一致的,动态的单元格布局,它将根据您传入其中的数据进行扩展和收缩.因此,当人们说想要这样的功能并不好时,我认为这是错误的,因为你可能想要滚动视图内的动态网格图像(视图),但是希望整个滚动视图包含除了网格之外的其他内容细胞.
现在,这是你如何做到这一点.在这里查看答案.它是一个可扩展的高度GridView,您需要在项目中导入/创建它.这基本上意味着随着更多项目被添加到GridView,它将只扩展其高度,而不是保持其高度设置和使用滚动.这正是你想要的.
在项目中使用ExpandableHeightGridView后,转到您希望GridView所在的XML布局.然后你可以做这样的事情(释义):
<ScrollView ...>
<RelativeLayout ...>
<com.example.ExpandableHeightGridView ... />
<other view items />
</RelativeLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
然后,在您设置GridView适配器的活动中,您需要确保将其设置为展开.所以:
ExpandableHeightGridView gridView = (ExpandableHeightGridView) findViewById(R.id.myId);
gridView.setAdapter(yourAdapter);
gridView.setExpanded(true);
Run Code Online (Sandbox Code Playgroud)
您希望这个可扩展的GridView的原因是,标准GridView不扩展的事实是导致它滚动的原因.它坚持一定的高度,然后随着更多的项目填充它超过其视图边界,它变得可滚动.现在,通过这个,您的GridView将始终扩展其高度以适应其中的内容,从而永远不允许它进入其滚动模式.这使您可以在ScrollView中使用它并在ScrollView中使用其上方或下方的其他视图元素,并将它们全部滚动.
这应该会给你你想要的结果.如果您有任何疑问,请告诉我.
Vik*_*pta 33
我知道我迟到了,但我有另一个解决方案,我必须分享,哪些工作完美无瑕.这里,该方法根据它包含的项目数计算GridView高度,并在运行时将高度设置为GridView.
public void setGridViewHeightBasedOnChildren(GridView gridView, int columns) {
ListAdapter listAdapter = gridView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
int items = listAdapter.getCount();
int rows = 0;
View listItem = listAdapter.getView(0, null, gridView);
listItem.measure(0, 0);
totalHeight = listItem.getMeasuredHeight();
float x = 1;
if( items > columns ){
x = items/columns;
rows = (int) (x + 1);
totalHeight *= rows;
}
ViewGroup.LayoutParams params = gridView.getLayoutParams();
params.height = totalHeight;
gridView.setLayoutParams(params);
}
Run Code Online (Sandbox Code Playgroud)
在调用setAdaptergridview后,只需调用即可
setGridViewHeightBasedOnChildren( <yourGridView> , <no of grid view columns> )
Run Code Online (Sandbox Code Playgroud)
它会工作的.
您可以像平常一样在xml中定义gridview
并让代码处理它.:)
Lio*_* T. 10
我找到了一种方法,在ScrollView中为GridView提供固定大小,并启用滚动它.这允许您在不必滚动GridView的所有元素的情况下查看整个ScrollView,并且使用ExpandableHeightGridView对我更有意义.
为此,您必须实现一个扩展GridView的新类,并重写onTouchEvent()以调用requestDisallowInterceptTouchEvent(true).因此,父视图将使网格拦截触摸事件.
GridViewScrollable.java:
package com.example;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.GridView;
public class GridViewScrollable extends GridView {
public GridViewAdjuntos(Context context) {
super(context);
}
public GridViewAdjuntos(Context context, AttributeSet attrs) {
super(context, attrs);
}
public GridViewAdjuntos(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent ev){
// Called when a child does not want this parent and its ancestors to intercept touch events.
requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(ev);
}
}
Run Code Online (Sandbox Code Playgroud)
在ScrollView中,在您的布局中添加所需的特征和边距:
<ScrollView 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:isScrollContainer="true" >
<com.example.GridViewScrollable
android:id="@+id/myGVS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:numColumns="auto_fit"
android:stretchMode="columnWidth" />
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
并在你的活动中得到它:
GridViewScrollable myGridView = (GridViewScrollable) findViewById(R.id.myGVS);
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助=)
我还试图GridView在NestedScrollView.
这个对另一个问题的回答对我有帮助:https : //stackoverflow.com/a/38612612
启用您的 GridView 属性作为
Run Code Online (Sandbox Code Playgroud)android:nestedScrollingEnabled="true"
原海报:Droid_Dev
| 归档时间: |
|
| 查看次数: |
70021 次 |
| 最近记录: |