ניתן להתאים אישית את הווידג'טים של הפעלת Cast באמצעות הגדרת הצבעים, עיצוב הלחצנים, הטקסט והתמונה הממוזערת ועל ידי בחירה של סוגי הלחצנים להצגה.
התאמה אישית של העיצוב של האפליקציה
בדוגמה הזו נוצר סגנון עיצוב מותאם אישית Theme.CastVideosTheme
,
ניתן להגדיר צבעים מותאמים אישית, סגנון שכבת-על מבוא, בקר מיני
וסגנון בקר מורחב.
<style name="Theme.CastVideosTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Set AppCompat's color theming attrs -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:textColorPrimary">@color/primary_text</item>
<item name="android:textColorSecondary">@color/secondary_text</item>
<item name="castIntroOverlayStyle">@style/CustomCastIntroOverlay</item>
<item name="castMiniControllerStyle">@style/CustomCastMiniController</item>
<item name="castExpandedControllerStyle">@style/CustomCastExpandedController</item>
</style>
שלוש השורות האחרונות שלמעלה מאפשרות לך להגדיר סגנונות ספציפיים ל שכבת-על להיכרות, מיני-בקר ובקר מורחב כחלק מהנושא הזה. דוגמאות מופיעות בסעיפים הבאים.
לחצן להתאמה אישית של הפעלת Cast
כדי להוסיף mediaRouteTheme
בהתאמה אישית לעיצוב של האפליקציה:
<style name="Theme.CastVideosTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- ... -->
<item name="mediaRouteTheme">@style/CustomMediaRouterTheme</item>
</style>
הצהרה על העיצוב המותאם אישית של נתב המדיה והצהרה על עיצוב מותאם אישית
mediaRouteButtonStyle
:
<style name="CustomMediaRouterTheme" parent="Theme.MediaRouter">
<item name="mediaRouteButtonStyle">@style/CustomMediaRouteButtonStyle</item>
</style>
<style name="CustomMediaRouteButtonStyle" parent="Widget.MediaRouter.Light.MediaRouteButton">
<item name="mediaRouteButtonTint">#EEFF41</item>
</style>
setTint
אם הגרסה של ספריית התמיכה חדשה יותר מ-26.0.0, צריך להשתמש בה. למבוגרים יותר
יש תמיכה בגרסאות של ספריות. צריך להשתמש ב-buttonTint
במקום זאת.
התאמה אישית של העיצוב של שכבת-העל של כרטיס המבוא
IntroductoryOverlay
המחלקה תומכת במאפייני סגנון שונים שהאפליקציה שלך יכולה לשנות
עיצוב. בדוגמה הזו מוסבר איך לשנות את מראה הטקסט בשני הלחצנים
והכותרת מעל לווידג'ט של שכבת-העל:
<style name="CustomCastIntroOverlay" parent="CastIntroOverlay">
<item name="castButtonTextAppearance">@style/TextAppearance.CustomCastIntroOverlay.Button</item>
<item name="castTitleTextAppearance">@style/TextAppearance.CustomCastIntroOverlay.Title</item>
</style>
<style name="TextAppearance.CustomCastIntroOverlay.Button" parent="android:style/TextAppearance">
<item name="android:textColor">#FFFFFF</item>
</style>
<style name="TextAppearance.CustomCastIntroOverlay.Title"parent="android:style/TextAppearance.Large">
<item name="android:textColor">#FFFFFF</item>
</style>
התאמה אישית של המיני-בקר
התאמה אישית של העיצוב
MiniControllerFragment
המחלקה תומכת במאפייני סגנון שונים שהאפליקציה שלך יכולה לשנות
עיצוב. הדוגמה הזו מראה איך להפעיל את התצוגה של התמונה הממוזערת, כדי
לשנות את מראה הטקסט גם של כותרת המשנה וגם של הכתוביות, להגדיר
לבחור צבעים ולהתאים אישית את הלחצנים:
<style name="CustomCastMiniController" parent="CastMiniController">
<item name="castShowImageThumbnail">true</item>
<item name="castTitleTextAppearance">@style/TextAppearance.AppCompat.Subhead</item>
<item name="castSubtitleTextAppearance">@style/TextAppearance.AppCompat.Caption</item>
<item name="castBackground">#FFFFFF</item>
<item name="castProgressBarColor">#FFFFFF</item>
<item name="castPlayButtonDrawable">@drawable/cast_ic_mini_controller_play</item>
<item name="castPauseButtonDrawable">@drawable/cast_ic_mini_controller_pause</item>
<item name="castStopButtonDrawable">@drawable/cast_ic_mini_controller_stop</item>
<item name="castLargePlayButtonDrawable">@drawable/cast_ic_mini_controller_play_large</item>
<item name="castLargePauseButtonDrawable">@drawable/cast_ic_mini_controller_pause_large</item>
<item name="castLargeStopButtonDrawable">@drawable/cast_ic_mini_controller_stop_large</item>
<item name="castSkipPreviousButtonDrawable">@drawable/cast_ic_mini_controller_skip_prev</item>
<item name="castSkipNextButtonDrawable">@drawable/cast_ic_mini_controller_skip_next</item>
<item name="castRewind30ButtonDrawable">@drawable/cast_ic_mini_controller_rewind30</item>
<item name="castForward30ButtonDrawable">@drawable/cast_ic_mini_controller_forward30</item>
<item name="castMuteToggleButtonDrawable">@drawable/cast_ic_mini_controller_mute</item>
<item name="castClosedCaptionsButtonDrawable">@drawable/cast_ic_mini_controller_closed_caption</item
</style>
בחירת לחצנים
בMiniControllerFragment
יש שלושה מקומות להצגת עטיפת האלבום
ושני לחצנים, או שלושה לחצני בקרה אם עטיפת האלבום לא מוצגת.
SLOT SLOT SLOT
1 2 3
כברירת מחדל, בקטע מוצג לחצן הפעלה או השהיה. מפתחים יכולים להשתמש
המאפיין castControlButtons
כדי לקבוע אילו לחצנים יוצגו.
לחצני הבקרה הנתמכים מוגדרים
מקורות מידע מזהים:
סוג לחצן | תיאור |
---|---|
@id/cast_button_type_empty |
לא למקם לחצן בחריץ הזה |
@id/cast_button_type_custom |
לחצן בהתאמה אישית |
@id/cast_button_type_play_pause_toggle |
מעבר בין הפעלה והשהיה |
@id/cast_button_type_skip_previous |
דילוג לפריט הקודם בתור |
@id/cast_button_type_skip_next |
דילוג לפריט הבא בתור |
@id/cast_button_type_rewind_30_seconds |
הרצת הסרטון 30 שניות אחורה |
@id/cast_button_type_forward_30_seconds |
דילוג של 30 שניות קדימה בסרטון |
@id/cast_button_type_mute_toggle |
השתקה וביטול ההשתקה של המקלט |
@id/cast_button_type_closed_caption |
פתיחת תיבת דו-שיח לבחירת טראקים של טקסט ואודיו |
הנה דוגמה לשימוש בעטיפת האלבום, במתג הפעלה/השהיה, ולחצן דילוג קדימה בסדר הזה משמאל לימין:
<array name="cast_mini_controller_control_buttons">
<item>@id/cast_button_type_empty</item>
<item>@id/cast_button_type_play_pause_toggle</item>
<item>@id/cast_button_type_forward_30_seconds</item>
</array>
...
<fragment
android:id="@+id/cast_mini_controller"
...
app:castControlButtons="@array/cast_mini_controller_control_buttons"
class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment">
אזהרה: המערך הזה חייב להכיל שלושה פריטים בדיוק. אחרת, קובץ זמן ריצה
תופיע הודעת חריג. אם אינך רוצה להציג לחצן בחריץ,
@id/cast_button_type_empty
הוספת לחצנים מותאמים אישית
MiniControllerFragment
תומך בהוספת לחצני בקרה מותאמים אישית,
שלא סופקו על ידי ה-SDK, למשל "תמונה ממוזערת" לחצן. השלבים:
ציון מקום להצגת לחצן מותאם אישית באמצעות
@id/cast_button_type_custom
במאפייןcastControlButtons
שלMiniControllerFragment
.ליישם קטגוריית משנה של
UIController
השדהUIController
מכיל שיטות שה-SDK קורא להן כשהמדינה (State) של פעילות ה-Cast או של סשן המדיה. מחלקה משנית שלך שלUIController
צריך לקחתImageView
כאחד מהפרמטרים ולעדכן את המצב לפי הצורך.מחלקה משנית
MiniControllerFragment
, ואז לשנות את ברירת המחדלonCreateView
והתקשרותgetButtonImageViewAt(int)
כדי לקבלImageView
לאותו לחצן מותאם אישית. ואז להתקשרbindViewToUIController(View, UIController)
כדי לשייך את התצוגהUIController
צפייה
MediaIntentReceiver
במאמר הוספת פעולות מותאמות אישית מוסבר איך מטפלים בפעולה מהלחצן בהתאמה אישית.הנה דוגמה לשיוך לחצן בחריץ 2 אל
UIController
שנקראMyCustomUIController
:
// arrays.xml
<array name="cast_expanded_controller_control_buttons">
<item>@id/cast_button_type_empty</item>
<item>@id/cast_button_type_rewind_30_seconds</item>
<item>@id/cast_button_type_custom</item>
<item>@id/cast_button_type_empty</item>
</array>
// MyCustomUIController.kt class MyCustomUIController(private val mView: View) : UIController() { override fun onMediaStatusUpdated() { // Update the state of mView based on the latest the media status. ... mView.visibility = View.INVISIBLE ... } } // MyMiniControllerFragment.kt class MyMiniControllerFragment : MiniControllerFragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { super.onCreateView(inflater, container, savedInstanceState) val customButtonView = getButtonImageViewAt(2) val myCustomUiController = MyCustomUIController(customButtonView) uiMediaController.bindViewToUIController(customButtonView, myCustomUiController) ... } }
// MyCustomUIController.java class MyCustomUIController extends UIController { private final View mView; public MyCustomUIController(View view) { mView = view; } @Override public onMediaStatusUpdated() { // Update the state of mView based on the latest the media status. ... mView.setVisibility(View.INVISIBLE); ... } } // MyMiniControllerFragment.java class MyMiniControllerFragment extends MiniControllerFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); ImageView customButtonView = getButtonImageViewAt(2); MyCustomUIController myCustomUiController = new MyCustomUIController(customButtonView); getUIMediaController().bindViewToUIController(customButtonView, myCustomUiController); ... } }
התאמה אישית של בקר מורחב
התאמה אישית של העיצוב
אם הפעילות של בקר מורחב כוללת סרגל כלים של עיצוב כהה, ניתן להגדיר עיצוב בסרגל הכלים כך שישתמש בטקסט בהיר ובצבע בהיר של סמל:
<style name="Theme.CastVideosTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="castExpandedControllerToolbarStyle">
@style/ThemeOverlay.AppCompat.Dark.ActionBar
</item>
</style>
תוכל לציין תמונות משלך שישמשו לשרטוט הלחצנים בקר מורחב:
<style name="CustomCastExpandedController" parent="CastExpandedController">
<item name="castButtonColor">@null</item>
<item name="castPlayButtonDrawable">@drawable/cast_ic_expanded_controller_play</item>
<item name="castPauseButtonDrawable">@drawable/cast_ic_expanded_controller_pause</item>
<item name="castStopButtonDrawable">@drawable/cast_ic_expanded_controller_stop</item>
<item name="castSkipPreviousButtonDrawable">@drawable/cast_ic_expanded_controller_skip_previous</item>
<item name="castSkipNextButtonDrawable">@drawable/cast_ic_expanded_controller_skip_next</item>
<item name="castRewind30ButtonDrawable">@drawable/cast_ic_expanded_controller_rewind30</item>
<item name="castForward30ButtonDrawable">@drawable/cast_ic_expanded_controller_forward30</item>
</style>
בחירת לחצנים
בפעילות בבקר המורחב יש חמישה מקומות להצגת לחצני בקרה. באמצע מיקום המכשיר תמיד מציג מתג להפעלה/השהיה ולא ניתן להגדיר אותו. ארבע האחרות ניתן להגדיר משבצות משמאל לימין, על ידי האפליקציה של השולח.
SLOT SLOT PLAY/PAUSE SLOT SLOT
1 2 BUTTON 3 4
כברירת מחדל, ב'פעילות' מוצג לחצן כתוביות, ניתן לדלג
לחצן הפריט הקודם, לחצן דילוג לפריט הבא ומתג השתקה
בארבעה המקומות האלה, משמאל לימין. מפתחים יכולים להשתמש
מאפיין castControlButtons
כדי לשנות את בחירת הלחצנים להצגה
אילו משבצות. רשימת לחצני הבקרה הנתמכים מוגדרת
משאבי המזהים זהים ל-
סוגי לחצנים ללחצני מיני-בקר.
הנה דוגמה שמציבה לחצן הרצה אחורה במשבצת השנייה, אפשרות של דילוג לחצן קדימה בחריץ השלישי, ומשאירים את המשבצת הראשונה והאחרונה ריקות:
// arrays.xml
<array name="cast_expanded_controller_control_buttons">
<item>@id/cast_button_type_empty</item>
<item>@id/cast_button_type_rewind_30_seconds</item>
<item>@id/cast_button_type_forward_30_seconds</item>
<item>@id/cast_button_type_empty</item>
</array>
...
// styles.xml
<style name="Theme.MyTheme">
<item name="castExpandedControllerStyle">
@style/CustomCastExpandedController
</item>
</style>
...
<style name="CustomCastExpandedController" parent="CastExpandedController">
<item name="castControlButtons">
@array/cast_expanded_controller_control_buttons
</item>
</style>
המערך חייב להכיל ארבעה פריטים בדיוק. אחרת, חריגה של סביבת זמן הריצה תגרום
לזרוק. אם אינך רוצה להציג לחצן בחריץ,
@id/cast_button_type_empty
CastContext
יכול לנהל את מחזור החיים וגם
של הפעילות הזו.
הוספת לחצנים מותאמים אישית
ל-ExpandedControllerActivity
יש תמיכה בהוספת לחצני בקרה בהתאמה אישית שלא סופקו על ידי ה-SDK.
כמו "אגודל כלפי מעלה". לחצן. השלבים:
ציון מקום להצגת לחצן מותאם אישית באמצעות
@id/cast_button_type_custom
במאפייןcastControlButtons
שלExpandedControllerActivity
. לאחר מכן תוכלו להשתמשgetButtonImageViewAt(int)
כדי לקבלImageView
לאותו לחצן מותאם אישית.ליישם קטגוריית משנה של
UIController
השדהUIController
מכיל שיטות שה-SDK קוראת להן כשהמדינה (State) של פעילות ה-Cast או של סשן המדיה. מחלקה משנית שלך של הפרמטרUIController
צריך להכילImageView
כאחד מהפרמטרים, ולעדכן את המצב לפי הצורך.מחלקה משנית,ExpandedControllerActivity, ואז שינוי מברירת המחדל
onCreate
ולהתקשרgetButtonImageViewAt(int)
כדי לקבל את האובייקט view של הלחצן. ואז להתקשרbindViewToUIController(View, UIController)
כדי לשייך את התצוגה ל-UIController
בהתאמה אישית.צפייה
MediaIntentReceiver
בהוספת פעולות מותאמות אישית כדי להבין איך לבצע את הפעולה בלחיצה על הלחצן 'בהתאמה אישית'.
הנה דוגמה לשיוך לחצן בחריץ 2 אל
UIController
שנקראה MyCustomUIController
:
// arrays.xml
<array name="cast_expanded_controller_control_buttons">
<item>@id/cast_button_type_empty</item>
<item>@id/cast_button_type_rewind_30_seconds</item>
<item>@id/cast_button_type_custom</item>
<item>@id/cast_button_type_empty</item>
</array>
// MyCustomUIController.kt class MyCustomUIController(private val mView: View) : UIController() { override fun onMediaStatusUpdated() { // Update the state of mView based on the latest the media status. ... mView.visibility = View.INVISIBLE ... } } // MyExpandedControllerActivity.kt internal class MyExpandedControllerActivity : ExpandedControllerActivity() { public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val customButtonView = getButtonImageViewAt(2) val myCustomUiController = MyCustomUIController(customButtonView) uiMediaController.bindViewToUIController(customButtonView, myCustomUiController) ... } }
// MyCustomUIController.java class MyCustomUIController extends UIController { private final View mView; public MyCustomUIController(View view) { mView = view; } @Override public onMediaStatusUpdated() { // Update the state of mView based on the latest the media status. ... mView.setVisibility(View.INVISIBLE); ... } } // MyExpandedControllerActivity.java class MyExpandedControllerActivity extends ExpandedControllerActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ImageView customButtonView = getButtonImageViewAt(2); MyCustomUIController myCustomUiController = new MyCustomUIController(customButtonView); getUIMediaController().bindViewToUIController(customButtonView, myCustomUiController); ... } }