AndroidのScrollView内にGridViewを配置しようとしています。 GridViewを配置すると機能しません。
こちらがレイアウトです。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/scroll_home"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<RelativeLayout
Android:id="@+id/layout_home"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<GridView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/programacao_grid"
Android:numColumns="auto_fit"
Android:gravity="center"
Android:columnWidth="50dp"
Android:stretchMode="columnWidth"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_below="@+id/calendario_programacao"
>
</GridView>
</RelativeLayout>
</ScrollView>
多くの検索の後、答えが見つかりました、それは以下です
検索した後、私はこのプロジェクトを見つけました link :-
ExpandableHeightGridView
クラス
package xx.xxx.xx.view;
import Android.content.Context;
import Android.util.AttributeSet;
import Android.view.ViewGroup;
import Android.widget.GridView;
public class ExpandableHeightGridView extends GridView {
boolean expanded = false;
public ExpandableHeightGridView(Context context)
{
super(context);
}
public ExpandableHeightGridView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public ExpandableHeightGridView(Context context, AttributeSet attrs,
int defStyle)
{
super(context, attrs, defStyle);
}
public boolean isExpanded()
{
return expanded;
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
// HACK! TAKE THAT Android!
if (isExpanded())
{
// Calculate entire height by providing a very large height hint.
// View.MEASURED_SIZE_MASK represents the largest height possible.
int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
else
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
public void setExpanded(boolean expanded)
{
this.expanded = expanded;
} }
layout.xml
ファイル:
<ScrollView
Android:id="@+id/sc_spots"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fillViewport="true" >
<xx.xxx.xx.view.ExpandableHeightGridView
Android:id="@+id/spotsView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="15dp"
Android:layout_marginBottom="15dp"
Android:layout_marginLeft="5dp"
Android:layout_marginRight="5dp"
Android:horizontalSpacing="10dp"
Android:isScrollContainer="false"
Android:numColumns="5"
Android:stretchMode="columnWidth"
Android:verticalSpacing="10dp" />
</ScrollView>
GridView
クラスの使用
mGridView = (ExpandableHeightGridView)
getView().findViewById(R.id.spotsView);
mGridView.setExpanded(true);
SpotsAdapter adapter = new SpotsAdapter(getActivity(),R.layout.spot_item,params);
mGridView.setAdapter(adapter);
adapter.notifyDataSetChanged();
これは私にとってはうまくいきます
// Setting on Touch Listener for handling the touch inside ScrollView
gridView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
@Igor Ronnerが提供するソリューションは素晴らしいですが、未知の理由で私のアプリで半分の役割を果たしました-スクロールビュー内では、グリッドビューはまったく存在しないようにフラットになっています。
残りの半分を埋めようとする多くの試行錯誤で、ほぼ半日かかりました-相対レイアウトを使用してグリッドビューにラップし、次のように自動拡大させます(実際に動作する実際のコード!!!):
<RelativeLayout
Android:id="@+id/grid_view_box"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_catalog"
>
<com.takken.app.Android.component.framework.ExpandableGridView
Android:id="@+id/grid_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:numColumns="2"
Android:horizontalSpacing="12dp"
Android:verticalSpacing="12dp"
/>
</RelativeLayout>