ჩვენ გთავაზობთ მიმოხილვას, თუ რას ნიშნავს მომავალი მრავალფანჯრის მხარდაჭერა Android N-ში დეველოპერებისთვის და როგორ გამოვიყენოთ საუკეთესო მისგან!
მრავალ ფანჯრის მხარდაჭერა არის სუფთა ფუნქცია, რომელსაც ჩვენ ველოდებით Android N-ში და ის, რაც დიდი ხანია გვინდოდა ყველა მოწყობილობაზე ყოფილიყო ხელმისაწვდომი. იმისთვის, რომ ეს იყოს სასიამოვნო გამოცდილება, დეველოპერებს შეიძლება მოუწიონ გარკვეული ცვლილებების შეტანა თავიანთ აპებში, რათა ის სწორად მხარდაჭერილი იყოს.
Google I/O-ის ერთ-ერთი სესია იყო დეველოპერებისთვის, რათა გაეცნოთ ახალი API-ების და სისტემის ქცევითი ცვლილებების შესახებ, რასაც მრავალი ფანჯრის მხარდაჭერა მოაქვს.
სესიას წარუდგინა Wale Ogunwale, ტექნიკური წამყვანი მენეჯერი Android ActivityManager-ისთვის და WindowManager Framework კომპონენტები -- ის და მისი გუნდი პასუხისმგებელნი არიან მრავალ ფანჯარაზე Android-ზე.
შეგიძლიათ უყუროთ მრავალ ფანჯრის რეჟიმის სესია YouTube-ზე, მაგრამ ჩვენ ასევე გთავაზობთ სესიის მიმოხილვას აქ.
- გაყოფილი ეკრანის რეჟიმი: ეს არის ნაგულისხმევად ხელმისაწვდომი რეჟიმი. როგორც სახელი გულისხმობს, ის საშუალებას გაძლევთ გახსნათ ორი აპლიკაცია გვერდიგვერდ.
- თავისუფალი ფორმის რეჟიმი: მწარმოებლებს შეუძლიათ ამის ჩართვა უფრო დიდ მოწყობილობებზე, რაც მომხმარებლებს საშუალებას აძლევს თავისუფლად შეცვალონ აქტივობების ზომა ეკრანის გაყოფილი რეჟიმის გარდა.
- სურათი სურათში რეჟიმი: განკუთვნილია Android TV მოწყობილობებზე, ეს რეჟიმი განკუთვნილია ვიდეო პლეერებისთვის, რომ იმუშაონ დამაგრებულ ფანჯარაში, სანამ მომხმარებელი ურთიერთობს სხვა აპლიკაციებთან.
android: resizeableActivity
აქტივობის ატრიბუტი თქვენს manifest-ში. false
. ეს უნდა გაკეთდეს მხოლოდ იმ შემთხვევაში, თუ ნამდვილად გამართლებულია, რადგან ეს თქვენს აპს ყოველთვის ცუდად გამოარჩევს გაშვება სრულეკრანიან რეჟიმში მაშინაც კი, თუ მომხმარებელი (ან სხვა აპლიკაცია) ცდილობს მის გაშვებას მრავალ ფანჯარაში რეჟიმი. მნიშვნელოვანია აღინიშნოს, რომ root აქტივობის ატრიბუტები ვრცელდება ყველა აქტივობაზე მისი ამოცანების დასტაში. სხვა სიტყვებით რომ ვთქვათ, თუ თქვენ გაქვთ აქტივობა, რომლის დაწყებაც შესაძლებელია სხვა აპების მიერ, დარწმუნდით, რომ იგი მხარს უჭერს მრავალ ფანჯრის რეჟიმს რადგან ვერ მოგცემთ გარანტიას, რომ სხვა აპლიკაციები დაიწყებენ თქვენს აქტივობას ახალ ამოცანაში გამოყენებით. Intent#FLAG_ACTIVITY_NEW_TASK
.Picture-in-picture რეჟიმის მხარდაჭერა უნდა გამოცხადდეს ცალსახად მეშვეობით. android: supportsPictureInPicture
ატრიბუტი. გაითვალისწინეთ, რომ ეს ატრიბუტი იგნორირებულია თუ. android: resizeableActivity
არის. false
განლაგების ატრიბუტები შეიძლება გამოყენებულ იქნას ნაგულისხმევი ზომებისა და განლაგების დასაყენებლად თავისუფალი ფორმის ფანჯრებისთვის, ან მინიმალური სიგანის ან სიმაღლის დასადგენად, როგორც თავისუფალი ფორმის, ასევე გაყოფილი ეკრანის რეჟიმებისთვის: -
android: defaultWidth
/android: defaultHeight
: აქტივობის ნაგულისხმევი ზომები (freeform mode). -
android: gravity
: აქტივობის საწყისი პოზიცია (freeform mode). -
android: minimalWidth
/android: minimalHeight
: აქტივობის მინიმალური ზომები (თავისუფალი და გაყოფილი ეკრანის რეჟიმები)
აქტივობის სასიცოცხლო ციკლის გაგება
The. საქმიანობის სასიცოცხლო ციკლი უცვლელია მრავალფანჯრის რეჟიმში: როგორც ითქვა, ზოგიერთმა დახვეწილმა განსხვავებამ აქტივობის მდგომარეობებს შორის შეიძლება გამოიწვიოს არასასურველი ქცევა, რომელსაც ჩვეულებრივ ვერ შეამჩნევდით ნ-მდე. მნიშვნელოვანია ამის ცოდნა.Activity#onResume()
და. Activity#onPause()
იწოდება მაშინ, როდესაც თქვენი აპი იძენს ან კარგავს ფოკუსს, მაგრამ არა აუცილებელი, როდესაც ის იწყება ან შეწყვეტს ხილვას. (გახსოვდეთ, რომ მხოლოდ ერთ აპს შეიძლება ჰქონდეს ფოკუსირება ნებისმიერ დროს.) აპებისთვის, რომლებიც მუდმივად განაახლებს კონტენტს (მაგ. ვიდეოს დაკვრა), დარწმუნდით, რომ ამუშავებთ კონტენტის განახლებების დაწყებას და შეწყვეტას. Activity#onStart()
და. Activity#onStop()
სამაგიეროდ. ამას არ აკეთებთ ვიდეო აპებისთვის, მაგალითად, ეს ნიშნავს, რომ დაკვრა მოხდება მხოლოდ იმ შემთხვევაში, თუ აპლიკაცია ფოკუსირებულია, რომელიც ამარცხებს მრავალფანჯრის რეჟიმის მიზანს. YouTube-ის ოფიციალურ აპს ჰქონდა მსგავსი პრობლემა, როდესაც პირველად ამოქმედდა Android N Developer Preview. გაშვების დროის ცვლილებების მართვა
როდესაც აპლიკაცია გადადის მრავალ ფანჯრის რეჟიმში, მოწყობილობის ზოგიერთი კონფიგურაცია შეიცვლება. თქვენ შეგიძლიათ დაუშვათ თქვენი აქტივობის გადატვირთვა (ამ შემთხვევაში. ფრაგმენტების შენახვა შეიძლება კარგი იდეა იყოს, თუ თქვენმა საქმიანობამ უნდა შეასრულოს ინტენსიური ოპერაცია გაშვებისას), ან აირჩიე. გაუმკლავდეს კონფიგურაციის ცვლილებებს აშკარად სამაგიეროდ. ოთხი მოწყობილობის კონფიგურაცია შეიძლება შეიცვალოს მრავალ ფანჯრის რეჟიმში შესვლისას ან შიგნით:screenSize
, smallestScreenSize
, screenLayout
და. orientation
. იხილეთ. Android დეველოპერების დოკუმენტაცია დამატებითი ინფორმაციისთვის თითოეული ატრიბუტის შესახებ, მაგრამ გაითვალისწინეთ, რომ. orientation
ამ შემთხვევაში აღარ ეხება მოწყობილობის ორიენტაციას. ამის ნაცვლად, ის უბრალოდ მიუთითებს, არის თუ არა თქვენი აქტივობის სიგანე მის სიმაღლეზე (ლანდშაფტი) უფრო დიდი თუ არა (პორტრეტი). გამოცხადება, რომ თქვენი აქტივობა გაუმკლავდება ამ ცვლილებებს, შეიძლება გაკეთდეს manifest-დან: android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
გაითვალისწინეთ, რომ ეს ნიშნავს, რომ თქვენ ნამდვილად დაგჭირდებათ ამ ცვლილებების გატარება. Activity#onConfigurationChanged()
, ხედების ხელით განახლებით ან ზოგიერთი რესურსის გადატვირთვით. გამორთული ფუნქციები მრავალ ფანჯრის რეჟიმში
სისტემის ზოგიერთ ფუნქციაზე გავლენას არ მოახდენს თქვენი აქტივობები მრავალფანჯრის რეჟიმში ყოფნისას:- სტატუსის ზოლისა და ნავიგაციის ზოლის ცვლილებები, როგორიცაა სისტემის ზოლების ჩაბნელება/დამალვა ან ჩაძირვის რეჟიმის გამოყენება, ეფექტი არ ექნება. ეს ლოგიკურია, რადგან თქვენი აქტივობა მხოლოდ ეკრანის ნაწილს იკავებს.
- The
android: screenOrientation
საქმიანობის ატრიბუტს ასევე არ აქვს ეფექტი მრავალფანჯრის რეჟიმში: ვინაიდან თქვენი აქტივობა იქნება ზომის შეცვლა, აზრი აღარ აქვს მას ჰქონდეს ფიქსირებული ორიენტაცია.
-
Activity#onMultiWindowModeChanged(boolean inMultiWindow)
: იწოდება, როდესაც აქტივობის მდგომარეობა იცვლება სრულეკრანიდან მრავალ ფანჯარაში და პირიქით. -
Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture)
: გამოიძახება, როდესაც აქტივობის მდგომარეობა იცვლება PIP რეჟიმში/დან. -
Activity#isInMultiWindowMode()
/Activity#isInPictureInPictureMode()
: დააბრუნეთ, არის თუ არა აქტივობა მრავალფანჯრის/სურათზე-სურათზე რეჟიმში თუ არა. -
Activity#overlayWithDecorCaption(boolean overlay)
: თავისუფალი ფორმის ფანჯრებისთვის, ეს მეთოდი შეიძლება გამოყენებულ იქნას იმისთვის, რომ წარწერა (ზოლი, რომელიც გამოიყენება ფანჯრის ირგვლივ გადასატანად) გადაფაროს შიგთავსზე, იმის ნაცვლად, რომ დაწიოს.
Activity#overlayWithDecorCaption()
, ეს მეთოდები ასევე მოცემულია. Fragment
კლასი. აქტივობების დაწყება მრავალ ფანჯრის რეჟიმში
-
Activity#enterPictureInPictureMode()
შეიძლება გამოყენებულ იქნას აქტივობის გამოსახულება-სურათის რეჟიმში დასაყენებლად. გაითვალისწინეთ, რომ აქტივობები PiP რეჟიმში არ იღებს შეტყობინებას შეყვანის მოვლენების შესახებ -- გამოყენებაMediaSession#setMediaButtonReceiver()
თუ გსურთ გაუმკლავდეთ ასეთ მოვლენებს. ასევე დარწმუნდით, რომ შეამოწმეთ Android Developers ვებსაიტი, თუ გაინტერესებთ Picture-in-picture Android N-ზე.
- თუ მოწყობილობა გაყოფილი ეკრანის რეჟიმშია, შეგიძლიათ აცნობოთ სისტემას თქვენი გვერდით სხვა აქტივობის გაშვების გამოყენებით
Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT
დროშა. დროშას არანაირი ეფექტი არ აქვს, თუ არა გაყოფილი ეკრანის რეჟიმში. - თუ მოწყობილობა თავისუფალი ფორმის რეჟიმშია,
ActivityOptions#setLaunchBounds()
შეიძლება გამოყენებულ იქნას ახალი აქტივობის ზომებისა და მდებარეობის ეკრანზე დასაზუსტებლად.
Გადმოათრიე და ჩააგდე
მიუხედავად იმისა, რომ გადაადგილების მხარდაჭერა არსებობს Honeycomb-ის შემდეგ, ადრე ეს შესაძლებელი იყო მხოლოდ იმავე აქტივობის ფარგლებში. Თოვს. მხარდაჭერილი მრავალ ფანჯარაში როგორც. ამის განხორციელება თითქოს. ძირითადად იგივე, რაც ადრე, რამდენიმე დამატებით ჯვარედინი აქტივობის გადასატანად და ჩამოსაშლელად:View#startDragAndDrop()
- ახალი მეტსახელი ამისთვის
View#startDrag()
. - ჯვარედინი აქტივობების გადაადგილების ჩასართავად, გადაიტანეთ ახალი დროშა
View#DRAG_FLAG_GLOBAL
. - თუ გჭირდებათ URI ნებართვების მიცემა მიმღების აქტივობაზე, გადასცეთ ახალი დროშები
View#DRAG_FLAG_GLOBAL_URI_READ
ანView#DRAG_FLAG_GLOBAL_URI_WRITE
, როგორც შესაბამისი.
- ახალი მეტსახელი ამისთვის
View#updateDragShadow()
- ანაცვლებს გადატანის ჩრდილს მიმდინარე გადაადგილების ოპერაციისთვის. დარეკვა შესაძლებელია მხოლოდ იმ აპლიკაციის მიერ, რომელმაც შექმნა ჩავლების ოპერაცია.
View#cancelDragAndDrop()
- აუქმებს ჩავლების ოპერაციას, რომელიც ამჟამად მიმდინარეობს. დარეკვა შესაძლებელია მხოლოდ იმ აპლიკაციის მიერ, რომელმაც შექმნა ჩავლების ოპერაცია.
- შემოწმება, აქვს თუ არა მოწყობილობა მხარს უჭერს თავისუფალ ფორმას ან სურათს-სურათის რეჟიმებს, შესაძლებელია მეშვეობით
PackageManager#hasSystemFeature()
, გამოყენებითPackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT
დაPackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE
შესაბამისად.
- The
android: windowBackground
ატრიბუტი შეიძლება გამოყენებულ იქნას როგორც ფონის ნახაზი, თუ აქტივობის ზომა იცვლება და მისი რენდერი ჩამორჩება. თუandroid: windowBackground
დაუყენებელია,android: windowBackgroundFallback
ნაცვლად გამოიყენება. მაგალითისთვის იხილეთ Multi-Window Playground-ის ნიმუშის აპლიკაცია.
- სახელურის რეჟიმი ელეგანტურად იცვლება:
- შეინარჩუნეთ UI თანმიმდევრულობა ორიენტაციის მიუხედავად. ელემენტები არ ცვლის პოზიციებს, რათა მოხდეს გლუვი გადასვლები.
- ზემოაღნიშნულის გაფართოება, არ გადახვიდეთ ძალიან განსხვავებულ განლაგებებს შორის ტელეფონის/ტაბლეტის განლაგებისთვის. ამის ნაცვლად, შეცვალეთ ტაბლეტის განლაგება მცირე ზომისთვის თანმიმდევრულობისთვის.
- დარწმუნდით, რომ თქვენი საქმიანობა მოერგება მცირე ზომებს მიერ მასალის დიზაინის ნიმუშების დაცვით.
- გამოყენება
FLAG_ACTIVITY_LAUNCH_ADJACENT
როდესაც აზრი აქვს უფრო სასიამოვნო გამოცდილების მიღებას გაყოფილი ეკრანის რეჟიმში. - ზომების შეუთავსებლობის გამოცხადება მხოლოდ მაშინ, როცა გამართლებულია. როგორც ზემოთ განვიხილეთ, სხვაგვარად ის თქვენს აპს ცუდად გამოარჩევს.
- მრავალ ფანჯრის დოკუმენტაცია.
- მასალის დიზაინის ინსტრუქციები გაყოფილი ეკრანის რეჟიმისთვის.
- მრავალ ფანჯრის აპლიკაციის ნიმუში.