Remove references to Player(Control)View from the dev guide
Remove most of the customisation documentation, since StyledPlayerView isn't really designed to be customised as deeply as PlayerView. Also remove most documentation around StyledPlayerControlView, especially as a standalone controller class - since it doesn't work well for this use-case. #minor-release PiperOrigin-RevId: 426090762
This commit is contained in:
parent
4112a99f49
commit
c8e23b491d
@ -64,9 +64,8 @@ Internally, `DefaultMediaSourceFactory` will wrap the content media source in an
|
||||
`AdsLoader.Provider` and use it to insert ads as defined by the media item's ad
|
||||
tag.
|
||||
|
||||
ExoPlayer's `StyledPlayerView` and `PlayerView` UI components both
|
||||
implement `AdViewProvider`. The IMA extension provides an easy to use
|
||||
`AdsLoader`, as described below.
|
||||
ExoPlayer's `StyledPlayerView` implements `AdViewProvider`. The IMA extension
|
||||
provides an easy to use `AdsLoader`, as described below.
|
||||
|
||||
### Playlists with ads ###
|
||||
|
||||
@ -123,11 +122,11 @@ VAST/VMAP ad tags in the sample list.
|
||||
|
||||
#### UI considerations ####
|
||||
|
||||
`StyledPlayerView` and `PlayerView` hide controls during playback of ads
|
||||
by default, but apps can toggle this behavior by calling
|
||||
`setControllerHideDuringAds`, which is defined on both views. The IMA SDK will
|
||||
show additional views on top of the player while an ad is playing (e.g., a 'more
|
||||
info' link and a skip button, if applicable).
|
||||
`StyledPlayerView` hides its transport controls during playback of ads by
|
||||
default, but apps can toggle this behavior by calling
|
||||
`setControllerHideDuringAds`. The IMA SDK will show additional views on top of
|
||||
the player while an ad is playing (e.g., a 'more info' link and a skip button,
|
||||
if applicable).
|
||||
|
||||
Since advertisers expect a consistent experience across apps, the IMA SDK does
|
||||
not allow customization of the views that it shows while an ad is playing. It is
|
||||
@ -139,9 +138,9 @@ The IMA SDK may report whether ads are obscured by application provided views
|
||||
rendered on top of the player. Apps that need to overlay views that are
|
||||
essential for controlling playback must register them with the IMA SDK so that
|
||||
they can be omitted from viewability calculations. When using `StyledPlayerView`
|
||||
or `PlayerView` as the `AdViewProvider`, they will automatically register
|
||||
their control overlays. Apps that use a custom player UI must register overlay
|
||||
views by returning them from `AdViewProvider.getAdOverlayInfos`.
|
||||
as the `AdViewProvider`, it will automatically register its control overlays.
|
||||
Apps that use a custom player UI must register overlay views by returning them
|
||||
from `AdViewProvider.getAdOverlayInfos`.
|
||||
|
||||
For more information about overlay views, see
|
||||
[Open Measurement in the IMA SDK][].
|
||||
|
@ -130,6 +130,5 @@ The following guidelines apply specifically for live streams:
|
||||
|
||||
[HlsMediaSource]: {{ site.exo_sdk }}/source/hls/HlsMediaSource.html
|
||||
[HTTP Live Streaming]: https://tools.ietf.org/html/rfc8216
|
||||
[UI components]: {{ site.baseurl }}/ui-components.html
|
||||
[Customization page]: {{ site.baseurl }}/customization.html
|
||||
[Medium post about HLS playback in ExoPlayer]: https://medium.com/google-exoplayer/hls-playback-in-exoplayer-a33959a47be7
|
||||
|
@ -12,28 +12,20 @@ implementation 'com.google.android.exoplayer:exoplayer-ui:2.X.X'
|
||||
~~~
|
||||
{: .language-gradle}
|
||||
|
||||
The most important components are `StyledPlayerControlView`, `StyledPlayerView`,
|
||||
`PlayerControlView` and `PlayerView`. The styled variants provide a more
|
||||
polished user experience, however are harder to customize.
|
||||
The most important component is `StyledPlayerView`, a view for media
|
||||
playbacks. It displays video, subtitles and album art during playback, as
|
||||
well as playback controls.
|
||||
|
||||
* [`StyledPlayerControlView`][] and [`PlayerControlView`][] are views for
|
||||
controlling playbacks. They display standard playback controls including a
|
||||
play/pause button, fast-forward and rewind buttons, and a seek bar.
|
||||
* [`StyledPlayerView`][] and [`PlayerView`][] are high level views for
|
||||
playbacks. They display video, subtitles and album art during playback, as
|
||||
well as playback controls using a `StyledPlayerControlView` or
|
||||
`PlayerControlView` respectively.
|
||||
`StyledPlayerView` has a `setPlayer` method for attaching and detaching (by
|
||||
passing `null`) player instances.
|
||||
|
||||
All four views have a `setPlayer` method for attaching and detaching (by passing
|
||||
`null`) player instances.
|
||||
## `StyledPlayerView` ##
|
||||
|
||||
## Player views ##
|
||||
|
||||
`StyledPlayerView` and `PlayerView` can be used for both video and audio
|
||||
playbacks. They render video and subtitles in the case of video playback, and
|
||||
can display artwork included as metadata in audio files. You can include them in
|
||||
your layout files like any other UI component. For example, a `StyledPlayerView`
|
||||
can be included with the following XML:
|
||||
`StyledPlayerView` can be used for both video and audio playbacks. It renders
|
||||
video and subtitles in the case of video playback, and can display artwork
|
||||
included as metadata in audio files. You can include it in your layout files
|
||||
like any other UI component. For example, a `StyledPlayerView` can be included
|
||||
with the following XML:
|
||||
|
||||
~~~
|
||||
<com.google.android.exoplayer2.ui.StyledPlayerView
|
||||
@ -50,7 +42,7 @@ attributes. These attributes can be used to customize the view's behavior, as
|
||||
well as its look and feel. Most of these attributes have corresponding setter
|
||||
methods, which can be used to customize the view at runtime. The
|
||||
[`StyledPlayerView`][] Javadoc lists these attributes and setter methods in
|
||||
more detail. [`PlayerView`][] defines similar attributes.
|
||||
more detail.
|
||||
|
||||
Once the view is declared in the layout file, it can be looked up in the
|
||||
`onCreate` method of the activity:
|
||||
@ -82,13 +74,13 @@ player.prepare();
|
||||
|
||||
### Choosing a surface type ###
|
||||
|
||||
The `surface_type` attribute of `StyledPlayerView` and `PlayerView` lets you set
|
||||
the type of surface used for video playback. Besides the values
|
||||
`spherical_gl_surface_view` (which is a special value for spherical video
|
||||
playback) and `video_decoder_gl_surface_view` (which is for video rendering
|
||||
using extension renderers), the allowed values are `surface_view`,
|
||||
`texture_view` and `none`. If the view is for audio playback only, `none` should
|
||||
be used to avoid having to create a surface, since doing so can be expensive.
|
||||
The `surface_type` attribute of `StyledPlayerView` lets you set the type of
|
||||
surface used for video playback. Besides the values `spherical_gl_surface_view`
|
||||
(which is a special value for spherical video playback) and
|
||||
`video_decoder_gl_surface_view` (which is for video rendering using extension
|
||||
renderers), the allowed values are `surface_view`, `texture_view` and `none`. If
|
||||
the view is for audio playback only, `none` should be used to avoid having to
|
||||
create a surface, since doing so can be expensive.
|
||||
|
||||
If the view is for regular video playback then `surface_view` or `texture_view`
|
||||
should be used. `SurfaceView` has a number of benefits over `TextureView` for
|
||||
@ -125,132 +117,29 @@ current display mode) can be queried using [`Util.getCurrentDisplayModeSize`][].
|
||||
The UI layer resolution can be queried using Android's [`Display.getSize`] API.
|
||||
{:.info}
|
||||
|
||||
## Player control views ##
|
||||
|
||||
When using `StyledPlayerView`, a `StyledPlayerControlView` is used internally to
|
||||
provide playback controls. When using a `PlayerView`, a `PlayerControlView` is
|
||||
used internally.
|
||||
|
||||
For specific use cases `StyledPlayerControlView` and `PlayerControlView` can
|
||||
also be used as standalone components. They can be included in your layout file
|
||||
as normal. For example:
|
||||
|
||||
~~~
|
||||
<com.google.android.exoplayer2.ui.StyledPlayerControlView
|
||||
android:id="@+id/player_control_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
~~~
|
||||
{: .language-xml}
|
||||
|
||||
The [`StyledPlayerControlView`][] and [`PlayerControlView`][] Javadoc list the
|
||||
the available attributes and setter methods for these components. Looking them
|
||||
up and attaching the player is similar to the example above:
|
||||
|
||||
~~~
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// ...
|
||||
playerControlView = findViewById(R.id.player_control_view);
|
||||
}
|
||||
|
||||
private void initializePlayer() {
|
||||
// Instantiate the player.
|
||||
player = new ExoPlayer.Builder(context).build();
|
||||
// Attach player to the view.
|
||||
playerControlView.setPlayer(player);
|
||||
// Set the media item to be played.
|
||||
player.setMediaItem(mediaItem);
|
||||
// Prepare the player.
|
||||
player.prepare();
|
||||
}
|
||||
~~~
|
||||
{: .language-java}
|
||||
|
||||
## Customization ##
|
||||
|
||||
Where significant customization is required, we expect that app developers will
|
||||
implement their own UI components rather than using those provided by
|
||||
ExoPlayer's UI module. That said, the provided UI components do allow for
|
||||
customization by setting attributes (as described above), overriding drawables,
|
||||
overriding layout files, and by specifying custom layout files.
|
||||
|
||||
### Overriding drawables ###
|
||||
|
||||
The drawables used by `StyledPlayerControlView` and `PlayerControlView`
|
||||
(with their default layout files) can be overridden by drawables with the same
|
||||
names defined in your application. See the [`StyledPlayerControlView`][] and
|
||||
[`PlayerControlView`][] Javadoc for a list of drawables that can be overridden.
|
||||
Note that overriding these drawables will also affect the appearance of
|
||||
`PlayerView` and `StyledPlayerView`, since they use these views internally.
|
||||
We don't guarantee that the customizations described in the following section
|
||||
will continue to work in future versions of the library. The resource IDs may
|
||||
change name, or some may be deleted entirely. This is indicated by the
|
||||
[resource IDs being marked 'private'][].
|
||||
{:.info}
|
||||
|
||||
### Overriding layout files ###
|
||||
`StyledPlayerView` uses `StyledPlayerControlView` to display the playback
|
||||
controls and progress bar. The drawables used by `StyledPlayerControlView` can
|
||||
be overridden by drawables with the same names defined in your application. See
|
||||
the [`StyledPlayerControlView`][] Javadoc for a list of control drawables that
|
||||
can be overridden.
|
||||
|
||||
All of the view components inflate their layouts from corresponding layout
|
||||
files, which are specified in their Javadoc. For example when a
|
||||
`PlayerControlView` is instantiated, it inflates its layout from
|
||||
`exo_player_control_view.xml`. To customize these layouts, an application
|
||||
can define layout files with the same names in its own `res/layout*`
|
||||
directories. These layout files will override the ones provided by the ExoPlayer
|
||||
library.
|
||||
## Further customization ##
|
||||
|
||||
As an example, suppose we want our playback controls to consist of only a
|
||||
play/pause button positioned in the center of the view. We can achieve this by
|
||||
creating an `exo_player_control_view.xml` file in the application’s
|
||||
`res/layout` directory, containing:
|
||||
Where customization beyond that described above is required, we expect that app
|
||||
developers will implement their own UI components rather than use those provided
|
||||
by ExoPlayer's UI module.
|
||||
|
||||
~~~
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ImageButton android:id="@id/exo_play"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="100dp"
|
||||
android:layout_gravity="center"
|
||||
android:background="#CC000000"
|
||||
style="@style/ExoMediaButton.Play"/>
|
||||
|
||||
<ImageButton android:id="@id/exo_pause"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="100dp"
|
||||
android:layout_gravity="center"
|
||||
android:background="#CC000000"
|
||||
style="@style/ExoMediaButton.Pause"/>
|
||||
|
||||
</FrameLayout>
|
||||
~~~
|
||||
{: .language-xml}
|
||||
|
||||
The change in visual appearance compared to the standard controls is shown
|
||||
below.
|
||||
|
||||
{% include figure.html url="/images/overriding-layoutfiles.png" index="1" caption="Replacing the standard playback controls (left) with custom controls (right)" %}
|
||||
|
||||
### Custom layout files ###
|
||||
|
||||
Overriding a layout file is an excellent solution for changing the layout across
|
||||
the whole of an application, but what if a custom layout is required only in a
|
||||
single place? To achieve this, first define a layout file as though overriding
|
||||
one of the default layouts, but this time giving it a different file name, for
|
||||
example `custom_controls.xml`. Second, use an attribute to indicate that this
|
||||
layout should be used when inflating the view. For example when using
|
||||
`PlayerView`, the layout inflated to provide the playback controls can be
|
||||
specified using the `controller_layout_id` attribute:
|
||||
|
||||
~~~
|
||||
<com.google.android.exoplayer2.ui.PlayerView android:id="@+id/player_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:controller_layout_id="@layout/custom_controls"/>
|
||||
~~~
|
||||
{: .language-xml}
|
||||
|
||||
[`PlayerView`]: {{ site.exo_sdk }}/ui/PlayerView.html
|
||||
[`PlayerControlView`]: {{ site.exo_sdk }}/ui/PlayerControlView.html
|
||||
[`StyledPlayerView`]: {{ site.exo_sdk }}/ui/StyledPlayerView.html
|
||||
[`StyledPlayerControlView`]: {{ site.exo_sdk }}/ui/StyledPlayerControlView.html
|
||||
[resource IDs being marked 'private']: https://developer.android.com/studio/projects/android-library#PrivateResources
|
||||
[`SDK_INT`]: {{ site.android_sdk }}/android/os/Build.VERSION.html#SDK_INT
|
||||
[`Util.getCurrentDisplayModeSize`]: {{ site.exo_sdk }}/util/Util.html#getCurrentDisplayModeSize(android.content.Context)
|
||||
[`Display.getSize`]: {{ site.android_sdk }}/android/view/Display.html#getSize(android.graphics.Point)
|
||||
|
@ -112,20 +112,20 @@ gets from the libgav1 decoder:
|
||||
|
||||
* GL rendering using GL shader for color space conversion
|
||||
|
||||
* If you are using `ExoPlayer` with `PlayerView` or `StyledPlayerView`,
|
||||
enable this option by setting `surface_type` of view to be
|
||||
* If you are using `ExoPlayer` with `StyledPlayerView`, enable this option
|
||||
by setting the `surface_type` of the view to be
|
||||
`video_decoder_gl_surface_view`.
|
||||
* Otherwise, enable this option by sending `Libgav1VideoRenderer` a
|
||||
message of type `Renderer.MSG_SET_VIDEO_OUTPUT` with an instance of
|
||||
`VideoDecoderOutputBufferRenderer` as its object.
|
||||
`VideoDecoderGLSurfaceView` is the concrete
|
||||
`VideoDecoderOutputBufferRenderer` implementation used by `PlayerView`
|
||||
and `StyledPlayerView`.
|
||||
`VideoDecoderOutputBufferRenderer` implementation used by
|
||||
`StyledPlayerView`.
|
||||
|
||||
* Native rendering using `ANativeWindow`
|
||||
|
||||
* If you are using `ExoPlayer` with `PlayerView` or `StyledPlayerView`,
|
||||
this option is enabled by default.
|
||||
* If you are using `ExoPlayer` with `StyledPlayerView`, this option is
|
||||
enabled by default.
|
||||
* Otherwise, enable this option by sending `Libgav1VideoRenderer` a
|
||||
message of type `Renderer.MSG_SET_VIDEO_OUTPUT` with an instance of
|
||||
`SurfaceView` as its object.
|
||||
|
@ -125,20 +125,20 @@ gets from the libvpx decoder:
|
||||
|
||||
* GL rendering using GL shader for color space conversion
|
||||
|
||||
* If you are using `ExoPlayer` with `PlayerView` or `StyledPlayerView`,
|
||||
enable this option by setting `surface_type` of view to be
|
||||
* If you are using `ExoPlayer` with `StyledPlayerView`, enable this option
|
||||
by setting the `surface_type` of the view to be
|
||||
`video_decoder_gl_surface_view`.
|
||||
* Otherwise, enable this option by sending `LibvpxVideoRenderer` a message
|
||||
of type `Renderer.MSG_SET_VIDEO_OUTPUT` with an instance of
|
||||
`VideoDecoderOutputBufferRenderer` as its object.
|
||||
`VideoDecoderGLSurfaceView` is the concrete
|
||||
`VideoDecoderOutputBufferRenderer` implementation used by `PlayerView`
|
||||
and `StyledPlayerView`.
|
||||
`VideoDecoderOutputBufferRenderer` implementation used by
|
||||
`StyledPlayerView`.
|
||||
|
||||
* Native rendering using `ANativeWindow`
|
||||
|
||||
* If you are using `ExoPlayer` with `PlayerView` or `StyledPlayerView`,
|
||||
this option is enabled by default.
|
||||
* If you are using `ExoPlayer` with `StyledPlayerView`, this option is
|
||||
enabled by default.
|
||||
* Otherwise, enable this option by sending `LibvpxVideoRenderer` a message
|
||||
of type `Renderer.MSG_SET_VIDEO_OUTPUT` with an instance of
|
||||
`SurfaceView` as its object.
|
||||
|
@ -89,8 +89,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
* A view for controlling {@link Player} instances.
|
||||
*
|
||||
* <p>A StyledPlayerControlView can be customized by setting attributes (or calling corresponding
|
||||
* methods), overriding drawables, overriding the view's layout file, or by specifying a custom view
|
||||
* layout file.
|
||||
* methods), or overriding drawables.
|
||||
*
|
||||
* <h2>Attributes</h2>
|
||||
*
|
||||
@ -188,123 +187,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
* <li><b>{@code exo_styled_controls_shuffle_on}</b> - The shuffle icon when shuffling is enabled.
|
||||
* <li><b>{@code exo_styled_controls_vr}</b> - The VR icon.
|
||||
* </ul>
|
||||
*
|
||||
* <h2>Overriding the layout file</h2>
|
||||
*
|
||||
* To customize the layout of StyledPlayerControlView throughout your app, or just for certain
|
||||
* configurations, you can define {@code exo_styled_player_control_view.xml} layout files in your
|
||||
* application {@code res/layout*} directories. But, in this case, you need to be careful since the
|
||||
* default animation implementation expects certain relative positions between children. See also <a
|
||||
* href="CustomLayout">Specifying a custom layout file</a>.
|
||||
*
|
||||
* <p>The layout files in your {@code res/layout*} will override the one provided by the library,
|
||||
* and will be inflated for use by StyledPlayerControlView. The view identifies and binds its
|
||||
* children by looking for the following ids:
|
||||
*
|
||||
* <ul>
|
||||
* <li><b>{@code exo_play_pause}</b> - The play and pause button.
|
||||
* <ul>
|
||||
* <li>Type: {@link ImageView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_rew}</b> - The rewind button.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_rew_with_amount}</b> - The rewind button with rewind amount.
|
||||
* <ul>
|
||||
* <li>Type: {@link TextView}
|
||||
* <li>Note: StyledPlayerControlView will programmatically set the text with the rewind
|
||||
* amount in seconds. Ignored if an {@code exo_rew} exists. Otherwise, it works as the
|
||||
* rewind button.
|
||||
* </ul>
|
||||
* <li><b>{@code exo_ffwd}</b> - The fast forward button.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_ffwd_with_amount}</b> - The fast forward button with fast forward amount.
|
||||
* <ul>
|
||||
* <li>Type: {@link TextView}
|
||||
* <li>Note: StyledPlayerControlView will programmatically set the text with the fast
|
||||
* forward amount in seconds. Ignored if an {@code exo_ffwd} exists. Otherwise, it works
|
||||
* as the fast forward button.
|
||||
* </ul>
|
||||
* <li><b>{@code exo_prev}</b> - The previous button.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_next}</b> - The next button.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_repeat_toggle}</b> - The repeat toggle button.
|
||||
* <ul>
|
||||
* <li>Type: {@link ImageView}
|
||||
* <li>Note: StyledPlayerControlView will programmatically set the drawable on the repeat
|
||||
* toggle button according to the player's current repeat mode. The drawables used are
|
||||
* {@code exo_styled_controls_repeat_off}, {@code exo_styled_controls_repeat_one} and
|
||||
* {@code exo_styled_controls_repeat_all}. See the section above for information on
|
||||
* overriding these drawables.
|
||||
* </ul>
|
||||
* <li><b>{@code exo_shuffle}</b> - The shuffle button.
|
||||
* <ul>
|
||||
* <li>Type: {@link ImageView}
|
||||
* <li>Note: StyledPlayerControlView will programmatically set the drawable on the shuffle
|
||||
* button according to the player's current repeat mode. The drawables used are {@code
|
||||
* exo_styled_controls_shuffle_off} and {@code exo_styled_controls_shuffle_on}. See the
|
||||
* section above for information on overriding these drawables.
|
||||
* </ul>
|
||||
* <li><b>{@code exo_vr}</b> - The VR mode button.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_subtitle}</b> - The subtitle button.
|
||||
* <ul>
|
||||
* <li>Type: {@link ImageView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_fullscreen}</b> - The fullscreen button.
|
||||
* <ul>
|
||||
* <li>Type: {@link ImageView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_minimal_fullscreen}</b> - The fullscreen button in minimal mode.
|
||||
* <ul>
|
||||
* <li>Type: {@link ImageView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_position}</b> - Text view displaying the current playback position.
|
||||
* <ul>
|
||||
* <li>Type: {@link TextView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_duration}</b> - Text view displaying the current media duration.
|
||||
* <ul>
|
||||
* <li>Type: {@link TextView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_progress_placeholder}</b> - A placeholder that's replaced with the inflated
|
||||
* {@link DefaultTimeBar}. Ignored if an {@code exo_progress} view exists.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_progress}</b> - Time bar that's updated during playback and allows seeking.
|
||||
* {@link DefaultTimeBar} attributes set on the StyledPlayerControlView will not be
|
||||
* automatically propagated through to this instance. If a view exists with this id, any
|
||||
* {@code exo_progress_placeholder} view will be ignored.
|
||||
* <ul>
|
||||
* <li>Type: {@link TimeBar}
|
||||
* </ul>
|
||||
* </ul>
|
||||
*
|
||||
* <p>All child views are optional and so can be omitted if not required, however where defined they
|
||||
* must be of the expected type.
|
||||
*
|
||||
* <h2 id="CustomLayout">Specifying a custom layout file</h2>
|
||||
*
|
||||
* Defining your own {@code exo_styled_player_control_view.xml} is useful to customize the layout of
|
||||
* StyledPlayerControlView throughout your application. It's also possible to customize the layout
|
||||
* for a single instance in a layout file. This is achieved by setting the {@code
|
||||
* controller_layout_id} attribute on a StyledPlayerControlView. This will cause the specified
|
||||
* layout to be inflated instead of {@code exo_styled_player_control_view.xml} for only the instance
|
||||
* on which the attribute is set.
|
||||
*
|
||||
* <p>You need to be careful when you set the {@code controller_layout_id}, because the default
|
||||
* animation implementation expects certain relative positions between children.
|
||||
*/
|
||||
public class StyledPlayerControlView extends FrameLayout {
|
||||
|
||||
|
@ -75,8 +75,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
||||
* during playback, and displays playback controls using a {@link StyledPlayerControlView}.
|
||||
*
|
||||
* <p>A StyledPlayerView can be customized by setting attributes (or calling corresponding methods),
|
||||
* overriding drawables, overriding the view's layout file, or by specifying a custom view layout
|
||||
* file.
|
||||
* or overriding drawables.
|
||||
*
|
||||
* <h2>Attributes</h2>
|
||||
*
|
||||
@ -175,81 +174,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
||||
* The drawables used by {@link StyledPlayerControlView} (with its default layout file) can be
|
||||
* overridden by drawables with the same names defined in your application. See the {@link
|
||||
* StyledPlayerControlView} documentation for a list of drawables that can be overridden.
|
||||
*
|
||||
* <h2>Overriding the layout file</h2>
|
||||
*
|
||||
* To customize the layout of StyledPlayerView throughout your app, or just for certain
|
||||
* configurations, you can define {@code exo_styled_player_view.xml} layout files in your
|
||||
* application {@code res/layout*} directories. These layouts will override the one provided by the
|
||||
* library, and will be inflated for use by StyledPlayerView. The view identifies and binds its
|
||||
* children by looking for the following ids:
|
||||
*
|
||||
* <ul>
|
||||
* <li><b>{@code exo_content_frame}</b> - A frame whose aspect ratio is resized based on the video
|
||||
* or album art of the media being played, and the configured {@code resize_mode}. The video
|
||||
* surface view is inflated into this frame as its first child.
|
||||
* <ul>
|
||||
* <li>Type: {@link AspectRatioFrameLayout}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_shutter}</b> - A view that's made visible when video should be hidden. This
|
||||
* view is typically an opaque view that covers the video surface, thereby obscuring it when
|
||||
* visible. Obscuring the surface in this way also helps to prevent flicker at the start of
|
||||
* playback when {@code surface_type="surface_view"}.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_buffering}</b> - A view that's made visible when the player is buffering.
|
||||
* This view typically displays a buffering spinner or animation.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_subtitles}</b> - Displays subtitles.
|
||||
* <ul>
|
||||
* <li>Type: {@link SubtitleView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_artwork}</b> - Displays album art.
|
||||
* <ul>
|
||||
* <li>Type: {@link ImageView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_error_message}</b> - Displays an error message to the user if playback fails.
|
||||
* <ul>
|
||||
* <li>Type: {@link TextView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_controller_placeholder}</b> - A placeholder that's replaced with the inflated
|
||||
* {@link StyledPlayerControlView}. Ignored if an {@code exo_controller} view exists.
|
||||
* <ul>
|
||||
* <li>Type: {@link View}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_controller}</b> - An already inflated {@link StyledPlayerControlView}. Allows
|
||||
* use of a custom extension of {@link StyledPlayerControlView}. {@link
|
||||
* StyledPlayerControlView} and {@link DefaultTimeBar} attributes set on the StyledPlayerView
|
||||
* will not be automatically propagated through to this instance. If a view exists with this
|
||||
* id, any {@code exo_controller_placeholder} view will be ignored.
|
||||
* <ul>
|
||||
* <li>Type: {@link StyledPlayerControlView}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_ad_overlay}</b> - A {@link FrameLayout} positioned on top of the player which
|
||||
* is used to show ad UI (if applicable).
|
||||
* <ul>
|
||||
* <li>Type: {@link FrameLayout}
|
||||
* </ul>
|
||||
* <li><b>{@code exo_overlay}</b> - A {@link FrameLayout} positioned on top of the player which
|
||||
* the app can access via {@link #getOverlayFrameLayout()}, provided for convenience.
|
||||
* <ul>
|
||||
* <li>Type: {@link FrameLayout}
|
||||
* </ul>
|
||||
* </ul>
|
||||
*
|
||||
* <p>All child views are optional and so can be omitted if not required, however where defined they
|
||||
* must be of the expected type.
|
||||
*
|
||||
* <h2>Specifying a custom layout file</h2>
|
||||
*
|
||||
* Defining your own {@code exo_styled_player_view.xml} is useful to customize the layout of
|
||||
* StyledPlayerView throughout your application. It's also possible to customize the layout for a
|
||||
* single instance in a layout file. This is achieved by setting the {@code player_layout_id}
|
||||
* attribute on a StyledPlayerView. This will cause the specified layout to be inflated instead of
|
||||
* {@code exo_styled_player_view.xml} for only the instance on which the attribute is set.
|
||||
*/
|
||||
public class StyledPlayerView extends FrameLayout implements AdViewProvider {
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user