Android Nougat-ის Freeform ფანჯრის რეჟიმი: რა არის ეს და როგორ შეუძლიათ დეველოპერებს მისი გამოყენება

Freeform მრავალ ფანჯრის რეჟიმი არის Android Nougat-ში არასაკმარისად გამოყენებული და დაუფასებელი ფუნქცია. ჩვენ განვმარტავთ, რა არის ეს და როგორ შეუძლიათ დეველოპერებს მისი ჩართვა.

თავისუფალი ფორმის ფანჯრის რეჟიმი, როგორც პირველად აჩვენა Ars Technica

როდესაც Android 7.0 Nougat პირველად გამოცხადდა 2016 წლის დასაწყისში, მან მოიტანა ძალიან მოთხოვნადი ფუნქცია Android პლატფორმაზე - მრავალ ფანჯრის მხარდაჭერა. ადამიანების უმეტესობამ იცის გაყოფილი ეკრანის მრავალ ფანჯრის მხარდაჭერა, რომელიც ნაგულისხმევად არის ჩართული ყველა Android Nougat ტელეფონსა და ტაბლეტზე. Android TV მოწყობილობებს Android Nougat-ით აღჭურვილია სურათების მრავალ ფანჯრის მხარდაჭერით.

თუმცა, Android Nougat-ში არის მესამე მრავალფანჯრის რეჟიმი, რომელიც არც თუ ისე ბევრმა იცის: თავისუფალი ფორმის ფანჯრის რეჟიმი. ეს რეჟიმი საშუალებას აძლევს Android-ს წარმოადგინოს აპლიკაციები, როგორც მცურავი ფანჯრები, რომელთა გადატანა და ზომის შეცვლა შესაძლებელია მომხმარებლის სურვილისამებრ. ეს არსებითად Android-ის იმპლემენტაციაა ა დაწყობის ფანჯრის მენეჯერი.

ში Android SDK დოკუმენტაცია, ნათქვამია, რომ:

უფრო დიდი მოწყობილობების მწარმოებლებს შეუძლიათ აირჩიონ თავისუფალი ფორმის რეჟიმის ჩართვა, რომელშიც მომხმარებელს შეუძლია თავისუფლად შეცვალოს თითოეული აქტივობის ზომა. თუ მწარმოებელი ჩართავს ამ ფუნქციას, მოწყობილობა გთავაზობთ თავისუფალი ფორმის რეჟიმს გარდა ეკრანის გაყოფის რეჟიმისა.

და ასევე, ში Android 7.0 CDD:

მოწყობილობის დანერგვა ეკრანის ზომით xlarge უნდა იყოს თავისუფალი ფორმის რეჟიმის მხარდაჭერა.

ეს მიუთითებს, რომ ნებისმიერ ახალ დიდ ეკრანზე Android მოწყობილობას, რომელიც მიეწოდება Android 7.0-ს, შეიძლება ჰქონდეს მწარმოებლის მიერ ჩართული თავისუფალი ფორმის ფანჯრის რეჟიმი.

თუმცა, ეს აბსოლუტურად არ არის რთული მოთხოვნა. შესაძლებელია იძულება ნებისმიერი Android Nougat მოწყობილობა (ჩართულია დეველოპერის პარამეტრებით) თავისუფალი ფორმის ფანჯრის რეჟიმის მხარდასაჭერად ორი განსხვავებული მეთოდიდან ერთის გამოყენებით:


თავისუფალი ფორმის ფანჯრის რეჟიმის ჩართვა Android Nougat-ის ნებისმიერ მოწყობილობაზე

ოფცია „აიძულებს აქტივობებს ზომის შეცვლას“ ჩართვა საშუალებას აძლევს აპებს ნებისმიერ მოწყობილობაზე თავისუფალი ფორმის რეჟიმში იმუშაონ

მეთოდი 1 (აუცილებელია კომპიუტერი adb-ით)

დარწმუნდით, რომ USB გამართვა ჩართულია დეველოპერის ოფციებში. შემდეგ, მიამაგრეთ თქვენი მოწყობილობა კომპიუტერზე დაინსტალირებული adb და შეასრულეთ შემდეგი ბრძანება:

adb shell settings put global enable_freeform_support 1

მეთოდი 2 (დამატებითი მოთხოვნების გარეშე)

ჩართეთ „აიძულებს აქტივობებს ზომის შეცვლას“ ოფცია დეველოპერის პარამეტრების ბოლოში.

ორივე ეს მეთოდი მოითხოვს სისტემის ინტერფეისის გადატვირთვას, სანამ ისინი ძალაში შევა. ამის გაკეთების უმარტივესი გზაა თქვენი მოწყობილობის გადატვირთვა (ან, თუ თქვენი მოწყობილობა როუტირებულია, შეგიძლიათ უბრალოდ მოკლათ com.android.systemui პროცესი)


კარგი, ასე რომ, თავისუფალი ფორმის რეჟიმი ჩართულია… ახლა რა?

თუ თქვენ ჩართეთ თავისუფალი ფორმის რეჟიმი მეთოდი 1-ის გამოყენებით, მაშინ მიმოხილვის მენიუში იქნება ახალი ღილაკი აპის ჩანაწერებზე აპის თავისუფალი ფორმის ფანჯრის რეჟიმში გასაშვებად.

მეთოდი 2, თუმცა, შეუძლებელია აპლიკაციის თავისუფალ რეჟიმში გაშვება თავად Android-ის საშუალებით. საბედნიეროდ, ნებისმიერი მესამე მხარის გამშვებისთვის შესაძლებელია აპლიკაციის გაშვება ფანჯრის თავისუფალი ფორმის რეჟიმში სტანდარტული Android API-ების გამოყენებით, რომლებიც დასრულებულია, როგორც API დონის 24 ნაწილი.

აპლიკაციის თავისუფალ რეჟიმში გაშვების გასაღები არის დარეკვა ActivityOptions.setLaunchBounds() მეთოდი. ეს მეთოდი იღებს ა Rect როგორც არგუმენტი, რომელიც შეიცავს ფანჯრის საზღვრებს, რომლითაც აპი გაშვება.

ამის შემდეგ შეგიძლიათ აპლიკაციის დაწყება startActivity(Intent, Bundle). თუ უკვე არ გაქვთ ActivityOptions პაკეტი, შეგიძლიათ შექმნათ ერთი ActivityOptions.makeBasic() და შემდეგ დარეკვა setLaunchBounds() ახლად შექმნილ შეკვრაზე.

გაითვალისწინეთ, რომ ნაგულისხმევად, თუ უკვე არის დავალება აპისთვის მიმოხილვის ეკრანზე, მაშინ Android უბრალოდ გადამისამართებთ თქვენ არსებულ (სრულეკრანიან) ამოცანაზე, რომელიც ადრე იყო გაშვებული მომხმარებელი. თქვენ მოგიწევთ აპის ნებისმიერი ამოცანის გასუფთავება მიმოხილვაში, სანამ შეეცდებით აპის თავისუფალი ფორმის ფანჯარაში გაშვებას. (აქტივობების მქონე აპებისთვის, რომლებიც გაშვებულია standard ან singleTop რეჟიმებში, თქვენ შეგიძლიათ აიძულოთ ახალი ფანჯრის გახსნა Intent.FLAG_ACTIVITY_MULTIPLE_TASK დარეკვამდე მინიშნება ჩანაფიქრისკენ startActivity().)


როგორ მუშაობს თავისუფალი ფორმის რეჟიმი ქუდის ქვეშ?

Იქ არის შესანიშნავი სტატია დაწერილი, რომელიც განმარტავს, თუ როგორ არის დანერგილი მრავალფანჯრის რეჟიმი, მათ შორის თავისუფალი ფორმის რეჟიმი, Android Nougat-ში. (შენიშვნა: სტატია დაწერილია ჩინურ ენაზე, ამიტომ აუცილებლად გაუშვით Google Translate-ის საშუალებით)

მოკლედ, აპლიკაციები თავისუფალი ფორმის რეჟიმში მუშაობს დანარჩენი სისტემისგან განცალკევებულ სტეკში (დაფიქრდით: ვირტუალური სამუშაო მაგიდა). აქედან გამომდინარე, შეუძლებელია თავისუფალი ფორმის აპლიკაციების გაშვება გამშვების ან სხვა სრულეკრანიანი აპის თავზე.

უფასო ფორმის რეჟიმში გაშვებული აპები (რომლებიც არ აქვთ android: windowIsFloating დაყენებულია ჭეშმარიტად) აქვს ა DecorCaptionView დამატებულია როგორც უმაღლესი დონის ბავშვი DecorView. ეს ხედი შეიცავს ა LinearLayout ფანჯრის წარწერის ზოლის განსაზღვრა ფანჯრის გადაადგილებისთვის, მაქსიმიზაციისა და დახურვისთვის. მიუხედავად იმისა, რომ მე პირადად არ გირჩევთ, ამ ხედის წვდომა და მორგება შესაძლებელია DecorView გამოყენებით Window.getDecorView(), ჩამოსხმა მას ა ViewGroup და შემდეგ წვდომა მისი ბავშვის ხედებზე.

ნებისმიერი აპლიკაცია, რომელიც შექმნილია Android-ის სტანდარტული გაყოფილი ეკრანის მრავალფანჯრის რეჟიმში კარგად ქცევისთვის, იმუშავებს თავისუფალი ფორმის რეჟიმში. isInMultiWindowMode() დაბრუნდება true იმ აპებისთვის, რომლებიც მუშაობენ თავისუფალი ფორმის რეჟიმში. არსებობს რამდენიმე სხვა საჯაროდ ხელმისაწვდომი კლასი და მეთოდი, რომელთა გამოყენება აპს შეუძლია, რომლებიც კონკრეტულად ეხება თავისუფალი ფორმის რეჟიმს:

  • Window.setDecorCaptionShade(): ეს მეთოდი შეიძლება გამოყენებულ იქნას სუბტიტრების კონტროლის (მაქსიმიზაციისა და დახურვის ღილაკი) ჩრდილის გადასაფარად აპებისთვის თავისუფალი ფორმის რეჟიმში.
  • Window.setRestrictedCaptionAreaListener(): ეს შეიძლება გამოყენებულ იქნას იმის დასადგენად, როდესაც ფანჯრის გადაადგილება ხდება თავისუფალი ფორმის რეჟიმში. The Window.OnRectrictedCaptionAreaChangedListener იწოდება ყოველ ჯერზე, როცა შეიცვლება წარწერის კონტროლის პოზიციები (როდესაც მომხმარებელი მოძრაობს ფანჯარაში) და უზრუნველყოფს a Rect სუბტიტრების კონტროლის ახალი საზღვრებით.
  • ActivityInfo.WindowLayout: ეს კლასი შეიცავს აპის მანიფესტში გამოცხადებულ ინფორმაციას თავისუფალი ფორმის ფანჯრის საწყისი პოზიციონირების შესახებ, რომელიც აპს შეუძლია მოითხოვოს გაშვებისას. მაგალითად, შეგიძლიათ ჩამოთვალოთ შემდეგი თქვენი მანიფესტის ტეგი:
     android: defaultHeight="640dp"
    android: defaultWidth="360dp"
    android: gravity="center" />
    შემდეგ, როდესაც მოწყობილობა უკვე თავისუფალი ფორმის რეჟიმშია და აპი გაშვებულია, ის ამოქმედდება ამ მითითებული საზღვრებით.

თავისუფალი ფორმის ფანჯრის რეჟიმის მაგალითები მოქმედებაში

სამუშაო ზოლი ამატებს დაწყების მენიუს და ბოლო აპლიკაციების უჯრას თავისუფალი ფორმის ფანჯრის რეჟიმის შესასრულებლად

2016 წლის ზაფხულში, სანამ Android Nougat ჯერ კიდევ დეველოპერის გადახედვა იყო, მე გამოვაქვეყნე აპლიკაცია ე.წ. დავალების პანელი რომელიც უზრუნველყოფს Windows-ის მსგავს დაწყების მენიუს და ბოლო აპლიკაციების სიას სისტემის გადაფარვაში. ის საშუალებას აძლევს მომხმარებლებს Nougat-ზე გაუშვან აპლიკაციები ფანჯრის თავისუფალი ფორმის რეჟიმში - და რადგანაც Taskbar იყენებს გადაფარვას, მას შეუძლია დარჩეს ეკრანზე თავისუფალი ფორმის ფანჯრის გარემოში. Taskbar-ისა და თავისუფალი ფორმის რეჟიმის კომბინაცია ნებისმიერ Android მოწყობილობას, განსაკუთრებით ტაბლეტებს აძლევს კომპიუტერის მსგავს შეგრძნებას.

Შენ შეგიძლია ჩამოტვირთეთ სამუშაო პანელი Google Play-ზე, ან იხილეთ საწყისი კოდი თავს GitHub-ზე. ამ სტატიაში ნახსენები ცნებების გარდა, მე ასევე გამოვიყენებ რამდენიმე ხრიკს, რათა შევინარჩუნო თავისუფალი ფორმის რეჟიმის გარემო აქტიური მაშინაც კი, როცა ეკრანზე თავისუფალი ფორმის ფანჯრები არ არის ნაჩვენები. მომხმარებლებს ასევე შეუძლიათ სურვილისამებრ დააყენონ Taskbar როგორც ნაგულისხმევი გამშვები, რათა მათ მოწყობილობას ავტომატურად ჩატვირთონ თავისუფალი ფორმის რეჟიმის გარემოში.

იმის გამო, რომ არ არსებობს მოწყობილობები, რომლებიც ოფიციალურად იგზავნება თავისუფალი ფორმის ფანჯრის მხარდაჭერით, ჩართულია OEM-ის მიერ (ამ მომენტისთვის), გირჩევთ Taskbar-ის გამოყენება, როგორც ინსტრუმენტი დეველოპერებისთვის, რათა გამოსცადონ თავიანთი აპლიკაციები თავისუფალი ფორმის ფანჯრის გარემოში მოწყობილობებზე, რომლებსაც სხვაგვარად არ უჭერენ მხარს ის.

Taskbar-ის გარდა, მე ასევე შევცვალე Launcher3-ის წყაროს კოდი AOSP-დან, რათა მას საშუალება მისცე აპლიკაციების თავისუფალი ფორმის რეჟიმში გაშვება. ეს არის საფონდო Android 7.1.1 გამშვების პირდაპირი კლონი, მინიმალური მოდიფიკაციით, რომელიც საჭიროა თავისუფალი ფორმის აპლიკაციების გასაშვებად. მე მივაწოდე ეს მოდიფიცირებული გამშვები იმ იმედით, რომ სხვა დეველოპერები განახორციელებენ მხარდაჭერას თავისუფალი ფორმის ფანჯრების გასაშვებად მათ მორგებულ გამშვებებში. Შენ შეგიძლია იხილეთ საწყისი კოდი GitHub-ზე, ან ჩამოტვირთეთ ნიმუში APK.

იმედი მაქვს, რომ პერსონალური გამშვებების დეველოპერებს შეუძლიათ გამოიყენონ ეს კოდი და ჩართონ მხარდაჭერა freeform-ის გაშვებისთვის ფანჯრის აპები იმ მომხმარებლებისთვის, რომლებსაც სურთ უფრო დიდი მოქნილობა ფანჯრების მართვისთვის მათ დიდ ეკრანზე მოწყობილობები.