في برمجة Android، يعتبر كل من GridView وListView من التخطيطات متعددة التحكم شائعة الاستخدام، وGridView هو الخيار الأول لتنفيذ مخطط القصور التسعة. تقدم هذه المقالة كيفية استخدام GridView لتنفيذ مخطط القصور التسعة. لدى GridView العديد من الاستخدامات الطريقة الأكثر شيوعًا على الإنترنت هي تنفيذ ImageAdapter لوراثة BaseAdapter ثم استخدامه لـ GridView ولن يتم تكرار مثل هذه الأساليب في هذه المقالة إلى ListView الذي تم تقديمه من قبل.
دعونا أولاً نلقي نظرة على نتائج تشغيل كود هذه المقالة:
تحتاج هذه المقالة إلى إضافة/تعديل 3 ملفات: main.xml، وnight_item.xml، وكود مصدر JAVA.
كود المصدر main.xml هو كما يلي، وهو GirdView، يستخدم لتحميل العناصر:
<?xml version="1.0" encoding="utf-8"?><GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview " android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing='10dp' android:columnWidth='90dp' android:stretchMode='columnWidth' android:gravity='center'/>
وهذه نبذة مختصرة عن بعض الخصائص:
android:numColumns="auto_fit"، تم ضبط عدد أعمدة GridView على الوضع التلقائي
android:columnWidth = "90dp"، عرض كل عمود، وهو عرض العنصر
android:stretchMode="columnWidth"، تتم مزامنة القياس مع حجم عرض العمود
android:verticalSpacing="10dp"، الهامش بين صفين، على سبيل المثال: التباعد بين الصف الأول (NO.0~NO.2) والصف الثاني (NO.3~NO.5) هو 10dp
android:horizontalSpacing = "10dp"، الهامش بين عمودين.
بعد ذلك، نقدم night_item.xml هذا XML مشابه جدًا لـ ImageItem.xml في ListView السابق:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom ="4dip" android:layout_width="fill_parent"> <ImageView android:layout_height="wrap_content" android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_centerHorizontal="true"> </ImageView> <TextView android:layout_width="wrap_content" android:layout_below="@+id/ItemImage" الروبوت:layout_height = "wrap_content" الروبوت: النص = "TextView01" android:layout_centerHorizontal="true" android:id="@+id/ItemText"> </TextView></RelativeLayout>
أخيرًا، هناك كود مصدر JAVA، والذي يشبه إلى حد كبير كود مصدر ListView JAVA السابق، ولكن مع المزيد من معالجة الأحداث "المحددة":
public void onCreate(Bundle saveInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);GridView Gridview = (GridView) findViewById(R.id.gridview);// إنشاء مصفوفة ديناميكية ونقلها إلى data ArrayList <HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();for(int i=0;i<10;i++){ HashMap<String, Object> Map = new HashMap<String, Object>(); Map.put("ItemImage", R.drawable. icon);// أضف معرف مورد الصورة Map.put("ItemText", "NO."+String.valueOf(i));// اجعل ItemText وفقًا للرقم التسلسلي lstImageItem.add(map);}// قم بإنشاء عناصر ImageItem <====> الخاصة بالمحول في المصفوفة الديناميكية، ويتوافق الاثنان واحدًا لواحد SimpleAdapter saImageItems = new SimpleAdapter(this, // لا يوجد تفسير lstImageItem,// مصدر البيانات R. Layout.night_item، // تنفيذ XML لـ night_item // المصفوفة الديناميكية والعنصر الفرعي المطابق لـ ImageItem new String[] {"ItemImage"، "ItemText"}، // معرف ImageView واحد ومعرفان TextView في ملف ImageItem XML new int[] {R.id.ItemImage,R.id.ItemText});// إضافة عرض الشبكة وعرضه . setAdapter(saImageItems);// إضافة معالجة الرسائل Gridview.setOnItemClickListener(new ItemClickListener());}// عند النقر على AdapterView (شاشة تعمل باللمس أو لوحة المفاتيح)، حدث النقر على العنصر الذي تم إرجاعه class ItemClickListener Implements OnItemClickListener{ public void onItemClick(AdapterView<?> arg0,// عرض المحول حيث حدثت النقرة arg1 ,//العرض داخل محول العرض الذي تم النقر عليه int arg2,//موضع العرض في المحول طويل arg3//معرف الصف للعنصر الذي تم النقر عليه) { // في هذه الحالة arg2=arg3 HashMap<String, Object> item=(HashMap<String, Object>) arg0.getItemAtPosition(arg2); ItemText الخاص بالعنصر setTitle((String)item.get("ItemText"));