إضافة أدوات دورانية إلى تطبيقك
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تُوفّر المراوح طريقة سريعة لاختيار قيمة من المجموعة. في الإعداد التلقائي
الحالة، فإن مؤشر سريان العمل يعرض القيمة المحددة حاليًا. النقر على مؤشر سريان العمل
قائمة تعرض جميع القيم الأخرى التي يمكن للمستخدم تحديدها.
الشكل 1 قائمة من دوّارة تعرض الخيارات المتاحة
القيم.
يمكنك إضافة مؤشر سريان العمل إلى التنسيق باستخدام
Spinner
وهو ما تفعله عادةً في تخطيط XML باستخدام
العنصر <Spinner>
يظهر ذلك في ما يلي
مثال:
<Spinner
android:id="@+id/planets_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
لملء مؤشر سريان العمل بقائمة اختيارات، حدِّد
SpinnerAdapter
في
Activity
أو
Fragment
رمز المصدر.
إذا كنت تستخدم مكونات Material Design،
معرّض للهجوم
القوائم المنسدلة تعادل Spinner
.
تعبئة مؤشر سريان العمل بخيارات المستخدمين
قد تأتي الخيارات التي تقدّمها بخصوص مؤشر سريان العمل من أي مصدر، ولكن
يجب أن يتم توفيرها من خلال SpinnerAdapter
، مثل
ArrayAdapter
إذا كانت الخيارات متاحة في صفيف أو
CursorAdapter
إذا كانت الخيارات متاحة من استعلام قاعدة البيانات.
فعلى سبيل المثال، إذا كانت الخيارات المتاحة للمؤشر الدوار محددة مسبقًا،
يمكنك تزويدها بصفيف سلسلة محددة في
مصدر السلسلة
ملف:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
مع صفيف مثل هذه، يمكنك استخدام التعليمة البرمجية التالية في
Activity
أو Fragment
لإضافة مؤشر سريان العمل
المصفوفة باستخدام مثيل ArrayAdapter
:
Kotlin
val spinner: Spinner = findViewById(R.id.planets_spinner)
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter.createFromResource(
this,
R.array.planets_array,
android.R.layout.simple_spinner_item
).also { adapter ->
// Specify the layout to use when the list of choices appears.
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// Apply the adapter to the spinner.
spinner.adapter = adapter
}
Java
Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this,
R.array.planets_array,
android.R.layout.simple_spinner_item
);
// Specify the layout to use when the list of choices appears.
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner.
spinner.setAdapter(adapter);
تشير رسالة الأشكال البيانية
createFromResource()
تتيح لك إنشاء ArrayAdapter
من صفيف السلسلة. تشير رسالة الأشكال البيانية
الوسيطة الثالثة لهذه الطريقة هي مورد تخطيط يحدد كيفية
يظهر الاختيار المحدد في عنصر التحكم في مؤشر سريان العمل. ويوفر النظام الأساسي
simple_spinner_item
التصميم. هذا هو التخطيط الافتراضي إلا إذا كنت تريد تحديد التخطيط الخاص بك
مظهر مؤشر سريان العمل.
اتصل
setDropDownViewResource(int)
لتحديد التنسيق الذي يستخدمه المحوّل لعرض قائمة خيارات مؤشر سريان العمل.
simple_spinner_dropdown_item
هو تخطيط قياسي آخر تحدده المنصة.
اتصل
setAdapter()
لاستخدام المحوّل مع "Spinner
".
الرد على اختيارات المستخدمين
عندما يحدد المستخدم عنصرًا من قائمة مؤشر سريان العمل،
عنصر واحد (Spinner
)
حدثًا مُختارًا ضمن العنصر.
لتحديد معالِج أحداث التحديد للمؤشر الدوّار، نفِّذ
AdapterView.OnItemSelectedListener
والواجهة
onItemSelected()
. على سبيل المثال، إليك تنفيذ للواجهة في
Activity
:
Kotlin
class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
...
override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
// An item is selected. You can retrieve the selected item using
// parent.getItemAtPosition(pos).
}
override fun onNothingSelected(parent: AdapterView<*>) {
// Another interface callback.
}
}
Java
public class SpinnerActivity extends Activity implements OnItemSelectedListener {
...
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
// An item is selected. You can retrieve the selected item using
// parent.getItemAtPosition(pos).
}
public void onNothingSelected(AdapterView<?> parent) {
// Another interface callback.
}
}
تشير رسالة الأشكال البيانية
واجهة AdapterView.OnItemSelectedListener
تتطلّب
onItemSelected()
و
onNothingSelected()
طُرق معاودة الاتصال.
تحديد تنفيذ الواجهة من خلال استدعاء
setOnItemSelectedListener()
:
Kotlin
val spinner: Spinner = findViewById(R.id.planets_spinner)
spinner.onItemSelectedListener = this
Java
Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
spinner.setOnItemSelectedListener(this);
في حال تنفيذ AdapterView.OnItemSelectedListener
مع Activity
أو Fragment
، كما في
المثال السابق، يمكنك ضبط this
كمثيل للواجهة.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Add spinners to your app\n\nSpinners provide a quick way to select one value from a set. In the default\nstate, a spinner shows its currently selected value. Tapping the spinner\ndisplays a menu showing all other values the user can select. \n**Figure 1.** A menu from a spinner, showing the available values.\n\nYou can add a spinner to your layout with the\n[Spinner](/reference/android/widget/Spinner)\nobject, which you usually do in your XML layout with a\n`\u003cSpinner\u003e` element. This is shown in the following\nexample: \n\n```xml\n\u003cSpinner\n android:id=\"@+id/planets_spinner\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\" /\u003e\n```\n\nTo populate the spinner with a list of choices, specify a\n[SpinnerAdapter](/reference/android/widget/SpinnerAdapter)\nin your\n[Activity](/reference/android/app/Activity) or\n[Fragment](/reference/androidx/fragment/app/Fragment)\nsource code.\n\nIf you are using Material Design Components,\n[exposed\ndropdown menus](https://www.material.io/components/menus/android#exposed-dropdown-menus) are the equivalent of a `Spinner`.\n\nPopulate the spinner with user choices\n--------------------------------------\n\nThe choices you provide for the spinner can come from any source, but you\nmust provide them through a `SpinnerAdapter`, such as an\n[ArrayAdapter](/reference/android/widget/ArrayAdapter)\nif the choices are available in an array or a\n[CursorAdapter](/reference/android/widget/CursorAdapter)\nif the choices are available from a database query.\n\nFor example, if the available choices for your spinner are pre-determined,\nyou can provide them with a string array defined in a\n[string resource\nfile](/guide/topics/resources/string-resource): \n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cresources\u003e\n \u003cstring-array name=\"planets_array\"\u003e\n \u003citem\u003eMercury\u003c/item\u003e\n \u003citem\u003eVenus\u003c/item\u003e\n \u003citem\u003eEarth\u003c/item\u003e\n \u003citem\u003eMars\u003c/item\u003e\n \u003citem\u003eJupiter\u003c/item\u003e\n \u003citem\u003eSaturn\u003c/item\u003e\n \u003citem\u003eUranus\u003c/item\u003e\n \u003citem\u003eNeptune\u003c/item\u003e\n \u003c/string-array\u003e\n\u003c/resources\u003e\n```\n\nWith an array like this, you can use the following code in your\n`Activity` or `Fragment` to supply the spinner with the\narray using an instance of `ArrayAdapter`: \n\n### Kotlin\n\n```kotlin\nval spinner: Spinner = findViewById(R.id.planets_spinner)\n// Create an ArrayAdapter using the string array and a default spinner layout.\nArrayAdapter.createFromResource(\n this,\n R.array.planets_array,\n android.R.layout.simple_spinner_item\n).also { adapter -\u003e\n // Specify the layout to use when the list of choices appears.\n adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)\n // Apply the adapter to the spinner.\n spinner.adapter = adapter\n}\n```\n\n### Java\n\n```java\nSpinner spinner = (Spinner) findViewById(R.id.planets_spinner);\n// Create an ArrayAdapter using the string array and a default spinner layout.\nArrayAdapter\u003cCharSequence\u003e adapter = ArrayAdapter.createFromResource(\n this,\n R.array.planets_array,\n android.R.layout.simple_spinner_item\n);\n// Specify the layout to use when the list of choices appears.\nadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\n// Apply the adapter to the spinner.\nspinner.setAdapter(adapter);\n```\n\nThe\n[createFromResource()](/reference/android/widget/ArrayAdapter#createFromResource(android.content.Context, int, int))\nmethod lets you create an `ArrayAdapter` from the string array. The\nthird argument for this method is a layout resource that defines how the\nselected choice appears in the spinner control. The platform provides the\n[simple_spinner_item](/reference/android/R.layout#simple_spinner_item)\nlayout. This is the default layout unless you want to define your own layout for\nthe spinner's appearance.\n\nCall\n[setDropDownViewResource(int)](/reference/android/widget/ArrayAdapter#setDropDownViewResource(int))\nto specify the layout the adapter uses to display the list of spinner choices.\n[simple_spinner_dropdown_item](/reference/android/R.layout#simple_spinner_dropdown_item)\nis another standard layout defined by the platform.\n\nCall\n[setAdapter()](/reference/android/widget/AdapterView#setAdapter(T))\nto apply the adapter to your `Spinner`.\n\nRespond to user selections\n--------------------------\n\nWhen the user selects an item from the spinner's menu, the\n[Spinner](/reference/android/widget/Spinner) object\nreceives an on-item-selected event.\n\nTo define the selection event handler for a spinner, implement the\n[`AdapterView.OnItemSelectedListener`](/reference/android/widget/AdapterView.OnItemSelectedListener)\ninterface and the corresponding\n[onItemSelected()](/reference/android/widget/AdapterView.OnItemSelectedListener#onItemSelected(android.widget.AdapterView\u003c?\u003e, android.view.View, int, long))\ncallback method. For example, here's an implementation of the interface in an\n`Activity`: \n\n### Kotlin\n\n```kotlin\nclass SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {\n ...\n override fun onItemSelected(parent: AdapterView\u003c*\u003e, view: View?, pos: Int, id: Long) {\n // An item is selected. You can retrieve the selected item using\n // parent.getItemAtPosition(pos).\n }\n\n override fun onNothingSelected(parent: AdapterView\u003c*\u003e) {\n // Another interface callback.\n }\n}\n```\n\n### Java\n\n```java\npublic class SpinnerActivity extends Activity implements OnItemSelectedListener {\n ...\n public void onItemSelected(AdapterView\u003c?\u003e parent, View view,\n int pos, long id) {\n // An item is selected. You can retrieve the selected item using\n // parent.getItemAtPosition(pos).\n }\n\n public void onNothingSelected(AdapterView\u003c?\u003e parent) {\n // Another interface callback.\n }\n}\n```\n\nThe\n`AdapterView.OnItemSelectedListener` interface requires the\n`onItemSelected()` and\n[onNothingSelected()](/reference/android/widget/AdapterView.OnItemSelectedListener#onNothingSelected(android.widget.AdapterView\u003c?\u003e))\ncallback methods.\n\nSpecify the interface implementation by calling\n[setOnItemSelectedListener()](/reference/android/widget/AdapterView#setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener)): \n\n### Kotlin\n\n```kotlin\nval spinner: Spinner = findViewById(R.id.planets_spinner)\nspinner.onItemSelectedListener = this\n```\n\n### Java\n\n```java\nSpinner spinner = (Spinner) findViewById(R.id.planets_spinner);\nspinner.setOnItemSelectedListener(this);\n```\n\nIf you implement the `AdapterView.OnItemSelectedListener`\ninterface with your `Activity` or `Fragment`, as in the\npreceding example, you can pass `this` as the interface instance."]]