39

現在のビューは

onCreateViewHolder で膨らむマイ リサイクラー アイテム

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="16dp">

    <ImageView
        android:id="@+id/gridListImageView"
        android:layout_width="96dp"
        android:layout_height="96dp"
        android:src="@drawable/a" />

    <TextView
        android:id="@+id/gridListView_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>

このようなものを表示したい リサイクルビューの半分の高さの行が 1 つあるのはどれですか? 残りのスペースにパディングを追加しますか? GridLayoutManagerでこれを行うことはできますか?

そして、これは私のGridLayoutManagerです

        GridLayoutManager glm = new GridLayoutManager(getActivity(), 2);
        recyclerView.setLayoutManager(glm);
4

9 に答える 9

70

アダプターでビューのレイアウトを拡張する場合、プログラムで高さを設定できます。使用する適切な高さを評価するために、親 ViewGroup (つまり、RecyclerView 自体) に依存できます。ここにサンプルがあります:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = mLayoutInflater.inflate(R.layout.view_item, parent, false);
    // work here if you need to control height of your items
    // keep in mind that parent is RecyclerView in this case
    int height = parent.getMeasuredHeight() / 4;
    itemView.setMinimumHeight(height);
    return new ItemViewHolder(itemView);        
}

これが役立つことを願っています。

于 2016-02-06T07:26:21.200 に答える
27

サポート ライブラリ 25.1.0 の時点で、ABOVE ANSWER は機能しません。以下の変更をお勧めします。

    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
        GridLayoutManager.LayoutParams lp = (GridLayoutManager.LayoutParams) v.getLayoutParams();
        lp.height = parent.getMeasuredHeight() / 4;
        v.setLayoutParams(lp);
        return new ViewHolder(v);
    }
于 2017-04-03T21:59:07.020 に答える