بدء استخدام واجهة المستخدِم المستندة إلى "العروض"
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
إضافة التبعية
Kotlin
implementation("androidx.media3:media3-ui:1.8.0")
Groovy
implementation "androidx.media3:media3-ui:1.8.0"
PlayerView
المكوّن الأكثر أهمية هو PlayerView
، وهو طريقة عرض لتشغيل الوسائط.
يعرض PlayerView
الفيديو والصور والترجمة والشاشة الرئيسية للألبوم أثناء التشغيل، بالإضافة إلى عناصر التحكّم في التشغيل.
تتضمّن PlayerView
طريقة setPlayer()
لربط مثيلات Player
وفصلها (من خلال تمرير null
).
يمكن استخدام PlayerView
لتشغيل الفيديوهات والصور والمحتوى الصوتي. يعرض هذا التطبيق الفيديو والترجمة والشرح في حال تشغيل الفيديو، كما يعرض الصور النقطية عند تشغيل الصور، ويمكنه عرض الأعمال الفنية المضمّنة كبيانات وصفية في الملفات الصوتية. يمكنك تضمينها في ملفات التصميم مثل أي مكوّن آخر من مكونات واجهة المستخدم. على سبيل المثال، يمكن تضمين PlayerView
باستخدام XML التالي:
<androidx.media3.ui.PlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:show_buffering="when_playing"
app:show_shuffle_button="true"/>
توضّح المقتطفات أعلاه أنّ PlayerView
يوفّر عدّة سمات.
يمكن استخدام هذه السمات لتخصيص سلوك العرض، بالإضافة إلى مظهره. معظم هذه السمات لها طرق ضبط مقابلة، ويمكن استخدامها لتخصيص العرض في وقت التشغيل. تتضمّن مستندات PlayerView
قائمة بهذه السمات وطُرق الضبط بتفصيل أكبر.
لتقديم تجربة أكثر راحة للمستخدمين، ننصحك بإضافة السمة keepScreenOn
Android
أو ضبط قفل التنشيط، إذا كنت تستخدم ExoPlayer. يمكنك التحقيق في الإجراءات الأخرى التي تُبقي الجهاز نشطًا في صفحات العمل في الخلفية.
android:keepScreenOn="true"
بعد تعريف طريقة العرض في ملف التنسيق، يمكن البحث عنها في طريقة onCreate
الخاصة بالنشاط:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
playerView = findViewById(R.id.player_view)
}
Java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
playerView = findViewById(R.id.player_view);
}
بعد تهيئة المشغّل، يمكن ربطه بالعرض من خلال استدعاء
setPlayer
:
Kotlin
// Instantiate the player.
val player = ExoPlayer.Builder(context).build()
// Attach player to the view.
playerView.player = player
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
Java
// Instantiate the player.
player = new ExoPlayer.Builder(context).build();
// Attach player to the view.
playerView.setPlayer(player);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
PlayerControlView
PlayerControlView
هي إحدى طرق العرض الفرعية PlayerView
التي تحتوي على شريط التقدم وأزرار التحكّم في التشغيل. يُرجى العِلم أنّ PlayerControlView
ليس
مخصّصًا للاستخدام كمكوّن مستقل خارج PlayerView
. يمكن تخصيصها من خلال ضبط السمات على PlayerView
(التي سيتم تمريرها إلى PlayerControlView
) أو توفير أداة تحكّم مخصّصة باستخدام android:id="@id/exo_controller
.
اختيار نوع مساحة العرض
تتيح لك السمة surface_type
الخاصة بالعنصر PlayerView
ضبط نوع مساحة العرض
المستخدَمة لتشغيل الفيديو. القيم المسموح بها هي surface_view
وtexture_view
وspherical_gl_surface_view
(وهي قيمة خاصة لتشغيل الفيديو الكروي) وvideo_decoder_gl_surface_view
(وهي مخصّصة لعرض الفيديو باستخدام أدوات عرض إضافية) وnone
(وهي مخصّصة لتشغيل الصوت فقط). يمكنك العثور على مزيد من المعلومات حول نوع المساحة الذي يجب اختياره في صفحة "المساحة".
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-08-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-08-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["Add the dependency \n\nKotlin \n\n```kotlin\nimplementation(\"androidx.media3:media3-ui:1.8.0\")\n```\n\nGroovy \n\n```groovy\nimplementation \"androidx.media3:media3-ui:1.8.0\"\n```\n\nPlayerView\n\nThe most important component is [`PlayerView`](/reference/androidx/media3/ui/PlayerView), a view for media playback.\n`PlayerView` displays video, images, subtitles, and album art during playback,\nas well as playback controls.\n\n`PlayerView` has a [`setPlayer()`](/reference/androidx/media3/ui/PlayerView#setPlayer(androidx.media3.common.Player)) method for attaching and detaching (by\npassing `null`) [`Player`](/reference/androidx/media3/common/Player) instances.\n\n`PlayerView` can be used for both video, image and audio playbacks. It renders\nvideo and subtitles in the case of video playback, bitmaps for image playback\nand can display artwork included as metadata in audio files. You can include it\nin your layout files like any other UI component. For example, a `PlayerView`\ncan be included with the following XML: \n\n \u003candroidx.media3.ui.PlayerView\n android:id=\"@+id/player_view\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"match_parent\"\n app:show_buffering=\"when_playing\"\n app:show_shuffle_button=\"true\"/\u003e\n\nThe snippet above illustrates that `PlayerView` provides several attributes.\nThese attributes can be used to customize the view's behavior, as well as its\nlook and feel. Most of these attributes have corresponding setter methods, which\ncan be used to customize the view at runtime. The `PlayerView` documentation\nlists these attributes and setter methods in more detail.\n\nFor a more comfortable user experience, consider adding the `keepScreenOn` Android\nattribute or [setting a wake lock](/reference/androidx/media3/exoplayer/ExoPlayer#setWakeMode(int)), if you are using ExoPlayer. You can\ninvestigate other actions that keep the device awake in the [background work\npages](/develop/background-work/background-tasks/awake). \n\n android:keepScreenOn=\"true\"\n\nOnce the view is declared in the layout file, it can be looked up in the\n`onCreate` method of the activity: \n\nKotlin \n\n```kotlin\noverride fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n // ...\n playerView = findViewById(R.id.player_view)\n}\n```\n\nJava \n\n```java\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n // ...\n playerView = findViewById(R.id.player_view);\n}\n```\n\n\u003cbr /\u003e\n\nWhen a player has been initialized, it can be attached to the view by calling\n`setPlayer`: \n\nKotlin \n\n```kotlin\n// Instantiate the player.\nval player = ExoPlayer.Builder(context).build()\n// Attach player to the view.\nplayerView.player = player\n// Set the media item to be played.\nplayer.setMediaItem(mediaItem)\n// Prepare the player.\nplayer.prepare()\n```\n\nJava \n\n```java\n// Instantiate the player.\nplayer = new ExoPlayer.Builder(context).build();\n// Attach player to the view.\nplayerView.setPlayer(player);\n// Set the media item to be played.\nplayer.setMediaItem(mediaItem);\n// Prepare the player.\nplayer.prepare();\n```\n\n\u003cbr /\u003e\n\nPlayerControlView\n\n[`PlayerControlView`](/reference/androidx/media3/ui/PlayerControlView) is one of `PlayerView` sub-Views that contains the\nprogress bar and buttons to control playback. Note that `PlayerControlView` is\nnot intended to be used a standalone component outside of `PlayerView`. It can\nbe customized by setting attributes on `PlayerView` (which will be passed onto\n`PlayerControlView`) or providing a custom controller with\n`android:id=\"@id/exo_controller`.\n\nChoose a surface type\n\nThe `surface_type` attribute of `PlayerView` lets you set the type of surface\nused for video playback. The allowed values are `surface_view`, `texture_view`,\n`spherical_gl_surface_view` (which is a special value for spherical video\nplayback), `video_decoder_gl_surface_view` (which is for video rendering using\nextension renderers) and `none` (for audio playback only). More information on\nwhich surface type to pick can be found [on the Surface page](/media/media3/ui/surface)."]]