0

ネストされたスクロールビュー全体をラップしていない画像にグリッドビューが表示されます。みんな助けてください。多くの方法を試しましたが失敗しました。

これは、ツールバーを折りたたむのに役立ち、グリッドビューの問題が発生している xml です。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.patelsanket.myalbum.activities.AlbumImageDisplayActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/headerImage1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:contentDescription="@string/shows_header_image"
                android:fitsSystemWindows="true"
                android:scaleType="fitXY"
                android:src="@drawable/cod" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

<GridView

        android:id="@+id/album_image_grid_view"
        android:layout_width="match_parent"
        android:layout_height="550dip"
        android:choiceMode="multipleChoice"
        android:horizontalSpacing="0.5dp"
        android:numColumns="2"
        android:paddingBottom="20dip" />

</RelativeLayout>

</android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:src="@drawable/ic_add"
        app:backgroundTint="#009688"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end|right" />

</android.support.design.widget.CoordinatorLayout>
4

3 に答える 3

2

たくさん検索した後、拡張可能なグリッドビューを使用して解決できることがわかりました。次のクラスを使用しましたが、正常に動作しています。

これはネイティブ GridView のカスタム実装です。ここでは、GridView の高さに関連する機能をオーバーライドします。この実装では、固定された Height GridView が廃止され、GridView の高さは、追加された子要素の数に応じて拡張されます。

public class ExpandableGridView extends GridView{

    boolean expanded = false;
    public boolean isExpanded()
    {
        return expanded;
    }

    public ExpandableGridView(Context context)
    {
        super(context);
    }

    public ExpandableGridView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public ExpandableGridView(Context context, AttributeSet attrs,
            int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {

        if (isExpanded())
        {
            // Calculate entire height by providing a very large height hint.
            // But do not use the highest 2 bits of this integer; those are
            // reserved for the MeasureSpec mode.
            int expandSpec = MeasureSpec.makeMeasureSpec(   
                    Integer.MAX_VALUE >> 2, 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;
    }

} 
于 2015-11-16T06:37:46.697 に答える