Penyesuaian UI

Media3 menyediakan PlayerView default yang menyediakan beberapa opsi penyesuaian. Untuk penyesuaian lebih lanjut, developer aplikasi diharapkan mengimplementasikan komponen UI mereka sendiri.

Praktik terbaik

Saat mengimplementasikan UI media yang terhubung ke Player Media3 (misalnya, implementasi ExoPlayer, MediaController, atau Player kustom), aplikasi disarankan untuk mengikuti praktik terbaik ini untuk mendapatkan pengalaman UI terbaik.

Tombol Putar/Jeda

Tombol putar dan jeda tidak sesuai dengan status pemutar tunggal. Misalnya, pengguna harus dapat memulai ulang pemutaran setelah berakhir atau gagal meskipun pemutar tidak dijeda.

Untuk menyederhanakan implementasinya, Media3 menyediakan metode utilitas untuk menentukan tombol mana yang akan ditampilkan (Util.shouldShowPlayButton) dan menangani penekanan tombol (Util.handlePlayPauseButtonAction):

Kotlin

val shouldShowPlayButton: Boolean = Util.shouldShowPlayButton(player)
playPauseButton.setImageDrawable(if (shouldShowPlayButton) playDrawable else pauseDrawable)
playPauseButton.setOnClickListener { Util.handlePlayPauseButtonAction(player) }

Java

boolean shouldShowPlayButton = Util.shouldShowPlayButton(player);
playPauseButton.setImageDrawable(shouldShowPlayButton ? playDrawable : pauseDrawable);
playPauseButton.setOnClickListener(view -> Util.handlePlayPauseButtonAction(player));

Memproses pembaruan status

Komponen UI perlu menambahkan Player.Listener untuk diberi tahu tentang perubahan status yang memerlukan update UI yang sesuai. Lihat Memproses peristiwa pemutaran untuk mengetahui detailnya.

Memuat ulang UI dapat memerlukan biaya yang mahal dan beberapa peristiwa pemain sering kali muncul bersamaan. Untuk menghindari memuat ulang UI terlalu sering dalam waktu singkat, sebaiknya proses onEvents saja dan picu update UI dari sana:

Kotlin

player.addListener(object : Player.Listener{
  override fun onEvents(player: Player, events: Player.Events){
    if (events.containsAny(
        Player.EVENT_PLAY_WHEN_READY_CHANGED,
        Player.EVENT_PLAYBACK_STATE_CHANGED,
        Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) {
      updatePlayPauseButton()
    }
    if (events.containsAny(Player.EVENT_REPEAT_MODE_CHANGED)) {
      updateRepeatModeButton()
    }
  }
})

Java

player.addListener(new Player.Listener() {
  @Override
  public void onEvents(Player player, Player.Events events) {
    if (events.containsAny(
        Player.EVENT_PLAY_WHEN_READY_CHANGED,
        Player.EVENT_PLAYBACK_STATE_CHANGED,
        Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) {
      updatePlayPauseButton();
    }
    if (events.containsAny(Player.EVENT_REPEAT_MODE_CHANGED)) {
      updateRepeatModeButton();
    }
  }
});

Menangani perintah yang tersedia

Komponen UI tujuan umum yang mungkin perlu berfungsi dengan implementasi Player yang berbeda harus memeriksa perintah pemutar yang tersedia untuk menampilkan atau menyembunyikan tombol dan untuk menghindari memanggil metode yang tidak didukung:

Kotlin

nextButton.isEnabled = player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)

Java

nextButton.setEnabled(player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT));