من در حال ساخت یک بازی در اندروید استودیو هستم و یک مشکل با کامپوننت Grid View دارم . من نمی توانم آیتم های درون GrideView را مانند این تصویر ، وسط چین کنم . من چند روش مانند android:stretchMode
یا android:layout_centerHorizontal
را امتحان کردم ، اما جواب نداد .
این کد XML من است :
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@android:color/holo_orange_light"
android:layout_weight="8"
android:layout_gravity="center">
<GridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10px"
android:id="@+id/gridAnswersChar"
android:numColumns="8"
android:gravity="center">
</GridView>
</RelativeLayout>
پاسخ 1 :
امیدوارم که نیاز حتمی شما نباشد که از GridView
استفاده کنید زیرا من معتقدم که این کار غیر ممکن است . اگر شما می توانید به جای آن از RecyclerView
استفاده کنید ، من برای شما راه حلی دارم . در این راه حل شما مجبورید از FlexboxLayoutManager
استفاده کنید که بخشی از پروژه FlexboxLayout گوگل است . پروژه FlexboxLayout
کد کامل این راه حل را می توانید از لینک زیر بیابید .
ابتدا FlexboxLayoutManager
را در ()MainActivity.onCreate
نصب کنید :
FlexboxLayoutManager manager = new FlexboxLayoutManager(this,FlexDirection.ROW);
manager.setJustifyContent(JustifyContent.CENTER);
RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler);
recycler.setLayoutManager(manager);
زمانی که مدیر طرح (layout manager) را ایجاد می کنیم ، FlexDirection.ROW
را قرار می دهیم تا بگوییم که می خواهیم برنامه ها را به صورت افقی در آوریم . (یعنی پر کردن یک ردیف و سپس رفتن به ردیف بعدی، به جای پر کردن یک ستون و سپس رفتن به ستون بعدی).
سپس ()setJustifyContent
را با استفاده از JustifyContent.CENTER
فراخوانی می کنیم .
رفتار GridView
و توانایی آنرا تقلید می کنیم تا تعدادی ستون داشته باشیم .
این کد در ()MyAdapter.onCreateViewHolder
است :
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) itemView.getLayoutParams();
layoutParams.width = (parent.getWidth() / 4) - layoutParams.leftMargin - layoutParams.rightMargin;
itemView.setLayoutParams(layoutParams);
در اینجا (parent.getWidth() / 4)
بسیار کلیدی است که باعث می شود هر کدام از آیتم ها یک چهارم عرض در دسترس نمایش داده شود . اگر تعداد ستون های دیگری را می خواهید ، به سادگی 4 تا 8 تغییر دهید، و غیره . ما همچنین leftMargin
و rightMargin
را از عرض کم می کنیم زیرا view ها دارای حاشیه هستند .
تصاویر نتیجه :