RecyclerView autofit LayoutManager

Я использую RecyclerView с StaggeredGridLayoutManager.

Я хочу, чтобы этот StaggeredGridLayoutManager или какой-либо LayoutManager занимал пустые области, если они есть. Например, если я установил spanCount = 3 он должен занимать всю ширину экрана, даже у меня есть 2 элемента или 1 элемент. В StaggeredGridLayoutManager я могу полностью разбить одну строку на: setFullSpan(true);, но не может охватывать 2 элемента только для одной строки.

Мой код для RecyclerView:

StaggeredGridLayoutManager sglm= new StaggeredGridLayoutManager(spanCount,StaggeredGridLayoutManager.VERTICAL);
sglm.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);

Я попробовал AsymmetricGridView и twoway-view но всегда есть пустая область

Я собираю скриншоты приложения Facebook:

введите описание изображения здесь

И вот приложение Google Keep, так как вы можете видеть, что высота строки фиксирована для каждой строки, но ширина элементов является гибкой, и я никогда не видел пустую область с Google Keep:

введите описание изображения здесь

И когда я его использую, всегда есть пустая область, так как вы можете видеть, что черная часть изображения пуста. Я хочу, чтобы RecyclerView занял эту область, расширив мои строки, как в приложении Google Keep:

введите описание изображения здесь

Я посетил эту страницу: android-how-to-create-a-facebook-like-images-gallery-grid, но мне это не помогло.

Вот другая страница, которую я посетил: grid-of-images-like-facebook-for-android

Кто-нибудь использует RecyclerView или любой View, как это? Может ли кто-нибудь предложить мне любой путь или какую-либо идею или направить меня туда, где я должен начать?

Ответ 1

Проверьте это на Git

BitFrames

Он позволяет вам устанавливать изображения, как вы хотите.

Проверьте это в Play Store

Приложение PlayStore

Ответ 2

/**
 * A LayoutManager that lays out children in a staggered grid formation.
 * It supports horizontal & vertical layout as well as an ability to layout children in reverse.
 * <p>
 * Staggered grids are likely to have gaps at the edges of the layout. To avoid these gaps,
 * StaggeredGridLayoutManager can offset spans independently or move items between spans. You can
 * control this behavior via {@link #setGapStrategy(int)}.
 */


/**
 * Sets the gap handling strategy for StaggeredGridLayoutManager. If the gapStrategy parameter
 * is different than the current strategy, calling this method will trigger a layout request.
 *
 * @param gapStrategy The new gap handling strategy. Should be
 *                    {@link #GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS} or {@link
 *                    #GAP_HANDLING_NONE}.
 * @see #getGapStrategy()
 */
public void setGapStrategy(int gapStrategy) {
    assertNotInLayoutOrScroll(null);
    if (gapStrategy == mGapStrategy) {
        return;
    }
    if (gapStrategy != GAP_HANDLING_NONE &&
            gapStrategy != GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS) {
        throw new IllegalArgumentException("invalid gap strategy. Must be GAP_HANDLING_NONE "
                + "or GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS");
    }
    mGapStrategy = gapStrategy;
    setAutoMeasureEnabled(mGapStrategy != GAP_HANDLING_NONE);
    requestLayout();
}