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.