簡単な質問:
私はこのListView
コードを使用します:
list.addHeaderView(headerView);
作業中の対処方法はgridview
?
ありがとう。
簡単な質問:
私はこのListView
コードを使用します:
list.addHeaderView(headerView);
作業中の対処方法はgridview
?
ありがとう。
を使用したヘッダー ビューまたはフッター ビューはサポートされていGridView
ません。申し訳ありません。
Google フォト アプリケーションでヘッダーをサポートする GridView の非常に優れた実装があります。これは OSS コードであるため、そのまま使用することも、独自の実装のリファレンスとして使用することもできます: http://grepcode.com/file/repository.grepcode .com/java/ext/com.google.android/android-apps/4.3_r2.1/com/android/photos/views/HeaderGridView.java
基本的な考え方は非常に単純です。WrapperAdapter は、項目の数を列の数だけ増やして偽の行を作成し、項目のヘッダー ビューを返します。
サンプルコード:
GridViewWithHeaderAndFooter gridView = (GridViewWithHeaderAndFooter) v.findViewById(R.id.ly_image_list_grid);
LayoutInflater layoutInflater = LayoutInflater.from(this);
View headerView = layoutInflater.inflate(R.layout.test_header_view, null);
View footerView = layoutInflater.inflate(R.layout.test_footer_view, null);
gridView.addHeaderView(headerView);
gridView.addFooterView(footerView);
Gradle ビルド: .
compile 'in.srain.cube:grid-view-with-header-footer:1.0.12'
これを使用できます。最後の数の項目に到達/終了すると、グリッドの下部にフッターが表示/非表示になります。実際にはスクロールしませんが、違いはほとんどわかりません。
アクティビティ/フラグメントの onCreate/onCreateView で、OnScrollListener を GridView に追加します。
....
GridView gridview = (YMAnimatedGridview) v.findViewById(R.id.my_gridview);
gridview.setAdapter(adapter);
final View footerView = mainView
.findViewById(R.id.my_grid_footer_view);
gridview.setOnScrollListener(new GridView.OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (firstVisibleItem + visibleItemCount == totalItemCount) {
// last item in grid is on the screen, show footer:
footerView.setVisibility(View.VISIBLE);
} else if (footerView.getVisibility() != View.GONE) {
// last item in grid not on the screen, hide footer:
footerView.setVisibility(View.GONE);
}
}
@Override
public void onScrollStateChanged(AbsListView view,
int scrollState) {
}
});
レイアウトは次のようになります。gridview の layout_weight (および layout_height) パラメーターに注意してください。フッターが表示されるときに、フッターに適切なスペースを作成する必要があります。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<GridView
android:id="@+id/my_gridview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:columnWidth="160dp"
android:gravity="center_horizontal"
android:horizontalSpacing="12dp"
android:numColumns="auto_fit"
android:layout_weight="1"
android:stretchMode="columnWidth"
android:verticalSpacing="6dp" />
<TextView
android:id="@+id/my_grid_footer_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_marginBottom="8dp"
android:orientation="horizontal"
android:visibility="gone"
android:text="footer text here" >
</TextView>
</LinearLayout>
ListView を使用してから、リストの各行が実際にはグリッドの行のように見えるようにする必要があります。したがって、3 列のグリッドがある場合は、3 列のように見える ListView のレイアウトを作成します。次に、アダプターの特定の側面を変更して、ListView の各行が実際に 3 行のデータを表すように機能させる必要があります。つまり、getCount()/3 型のものです。
AsymmetricGridViewを使用して、より大きな rowSpan でヘッダー/フッターを指定して、行全体を取得することができます。
このライブラリを使用できますhttp://tonicartos.github.io/StickyGridHeaders/
これにより、スティッキーなヘッダーを作成できます (リストをグループ化し、ヘッダーを現在のグループに表示し続けるため)。スティッキー機能をオフにすることもできます。
最初の行のセルの外観を変更してみませんか? 列の数がわかっている場合は、ヘッダーに表示される項目の数 = 列の数がわかります。
ライブラリなどを使用せずに、目的の機能を実現する方法があります。
編集: Google による HeaderGridView 実装を借りるだけです。ここ
を参照してください
。フッター用にカスタマイズすることもできます。以下の提案は複雑すぎて、さらに調整が必要です。具体的な詳細は省きますが、これだけで十分です。
1) GridView をサブクラス化する
2) onScrollChanged をオーバーライドする
3) スクロールするたびにオフセットを計算する
4) parentView(headerView と gridview を含むビュー) の変換 y を -Offset.(view.setTranslationY(-offset) に設定します。また、if ステートメントも用意します。特定のオフセットに達すると、スクロールが停止します.
5) 明らかに、グリッドビューに attachToGridview(View view) のようなメソッドを含めることができるように、これを適切に構造化する必要があります。私はこれを完全に実装しています。GridView にはバグがあり、ビューがリサイクルされるため、オフセットを取得する方法については、GridView のスクロール オフセットに関する
ページを参照してください。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<com.test.Breadcrumbs android:layout_width="fill_parent" android:layout_height="100dp" />
<GridView
android:id="@+id/grid"
android:numColumns="auto_fit"
android:gravity="center"
android:stretchMode="columnWidth"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp">
</GridView>
</LinearLayout>
パンくずリスト:
public class Breadcrumbs extends LinearLayout {
public Breadcrumbs(final Context context, final AttributeSet attrs) {
super(context, attrs);
final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutView = inflater.inflate(R.layout.breadcrumbs, this, true);
正常に動作し、グリッドのスクロールも同様に機能します。