RecyclerView のアイテムの高さを、たとえば画面の高さの 30% にするにはどうすればよいでしょうか?
ConstraintLayout や PercentFrameLayout/PercentRelativeLayout を単純に使用することはできません。これらは子レイアウトを親レイアウトに対して相対的に配置するため、サイズが画面と一致しない可能性があります。
できれば、これを純粋な XML で実行したいと思います (画面の高さを動的に取得するために Runnable を使用する必要はありません)。
編集
明確に言うと、多くのソリューションでは RecyclerView の高さを制限することを提案していますが、それは意図したことではありません。RecyclerView は画面に表示する必要があります。ここでは、画面の幅 (高さではなく) について説明しています。
そのアイデアはカードの幅を画面の幅の33%にするRecyclerView が画面を水平方向にスクロールしても、その幅は変更されません。
ベストアンサー1
特定のサイズを強制するためLayoutManager
に使用するメソッドの 1 つをオーバーライドできます。RecyclerView
recyclerView.setLayoutManager(new LinearLayoutManager(this){
@Override
public boolean checkLayoutParams(RecyclerView.LayoutParams lp) {
// force height of viewHolder here, this will override layout_height from xml
lp.height = getHeight() / 3;
return true;
}
});
これは、RecyclerView
画面に収まることを前提としています。
より複雑なソリューション(アイテムごとの制御とXMLからのパーセントインフレーションを備えたカスタムレイアウトマネージャー)が必要な場合は、この答え。