La liste Android RecycleView utilise le sous-élément moyen de GridLayoutManager Item, et les largeurs gauche et droite sont les mêmes

1. Description des besoins :

La liste est divisée en deux colonnes. La largeur des deux sous-éléments est la même, et les marges gauche et droite sont les mêmes, juste pour bien paraître. La largeur des sous-éléments est adaptée au téléphone mobile, et la hauteur est adaptée à la largeur.

2. Description du problème :

Mais lorsque nous le définissons directement, son sous-élément sera sur le côté gauche de la mise en page qui lui est donnée, j'ai donc pensé à définir les marges gauche et droite du sous-élément, mais il existe trop de types d'écrans de téléphone Android , donc sur certains téléphones, ce n'est pas Daxing.

3 : Résolution :

Puisqu'il est nécessaire de faire correspondre la largeur de l'écran du téléphone mobile, laissez la largeur du téléphone mobile déterminer la largeur du sous-élément.

1. Dans le fichier de mise en page XML, définissez la largeur de RecyclerView sur match_parent

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

Mais en général, par souci de beauté, la liste aura des marges, ici vous pouvez la définir vous-même

2. Dans le code, définissez GridLayoutManager et appliquez-le à RecyclerView

RecyclerView recyclerView = findViewById(R.id.recyclerView);
GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);

3. Créez un adaptateur pour RecyclerView et réécrivez la méthode dans l'adaptateur onCreateViewHolder()(n'oubliez pas d'écrire du code dans l'adaptateur)

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
    // 计算子项的宽度
    int screenWidth = parent.getContext().getResources().getDisplayMetrics().widthPixels;
    int itemWidth = (screenWidth - dpToPx(40)) / 2;
    // 设置子项的宽度
    view.getLayoutParams().width = itemWidth;
    return new ViewHolder(view);
}

private int dpToPx(int dp) {
    float density = getResources().getDisplayMetrics().density;//这个getresources需要context对象哈,拿activity的也行,application的也行
    return Math.round(dp * density);
}

J'ai soustrait 40dp de ce qui précède, juste pour la beauté, sinon les deux sous-éléments seront directement ensemble, ce qui est moche ~~

c'est ça. J'ai réglé la décoration avant, mais j'ai trouvé que ça ne fonctionnait pas, et il fallait s'adapter à la largeur du téléphone portable.

Bien sûr, si la largeur de chaque enfant change avec le contenu, il est recommandé d'utiliser la mise en page fluide.

Guess you like

Origin blog.csdn.net/LoveFHM/article/details/131555650