рд╕рд┐рддрдВрдмрд░ 2007 рдХреЛ рдЬрд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рд╕рд┐рддрдВрдмрд░ 2017 рдерд╛, рдРрдкреНрдкрд▓ рдиреЗ iPhone X рдХреЛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реБрдП рдлреИрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪреАрди рдХреЗ рд╣рдорд╛рд░реЗ рджреЛрд╕реНрддреЛрдВ рдиреЗ рджреЛ рдмрд╛рд░ рдмрд┐рдирд╛ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ Apple рд╕реЗ рдХреЙрдкреА рдХрд░ рд▓рд┐рдпрд╛ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдмрд╣реБрдд рд╣реА рдкрд╣рд▓рд╛ рдорд┐рдиреА-рдлреНрд░рд┐рдВрдЬ рдЕрднреА рднреА рдПрд╕реЗрдВрд╢рд┐рдпрд▓ рдлреЛрди рдореЗрдВ рдерд╛, рдЬреЛ рдмрдВрдж рдирд╣реАрдВ рд╣реБрдЖ)ред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ? Huawei P20, Asus Zenfone 5, OnePlus 6, Motorola One Power, Xiaomi Redmi 6 рдФрд░ рдЕрдиреНрдп рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдкреНрд░рд╕рд┐рджреНрдз рдирд┐рд░реНрдорд╛рддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рдлреЛрди рдХрд╛ рдЙрддреНрдкрд╛рджрди рдпрд╛ рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╕реИрдорд╕рдВрдЧ рдФрд░ Google рдЗрд╕
рджреМрдбрд╝ рдореЗрдВ рдЕрдВрддрд┐рдо рдордЬрдмреВрддреА рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХреЗ рд▓рд┐рдП
рдкреНрд░рдЪрд╛рд░ рдХреЗ рдЕрдВрддрд┐рдо рдЧрдврд╝ рдереЗред рдпрд╛ рдирд╣реАрдВ? рдЕрдлрд╡рд╛рд╣реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, Google Pixel 3 XL
рдЗрд╕ рдХреНрд░реИрдк рдХреЗ рд╕рд╛рде рдЧреНрд░реЗрд╕рдлреБрд▓ рдиреЗрдХрд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рднреА рд╣реЛрдЧрд╛ред рдЦреИрд░, рд╣рдо, рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЗрд╡рд▓ рдЗрд╕ рдХрдЯрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рдЖрд░рд╛рдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХреЗрдВред рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╡рд░рдг рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдлреБрд▓рд╕реНрдХреНрд░реАрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдпрд╛
windowActionBarOverlay = true
рдереАрдо рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓рдЧрднрдЧ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╕реНрдХреНрд░реАрди рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВ, рдФрд░ рдЖрдк рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкрд░ рд▓реЗрдЖрдЙрдЯ рдХреИрд╕реЗ рдЬрд╛рдПрдЧрд╛ред рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрднреА рднреА рд╕рднреА рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдФрд░ рдбрдмрд▓-рдЪреЗрдХ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
1. рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг / рдПрдореБрд▓реЗрдЯрд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВ
рдмреИрдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдкреАред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдкреА рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 5 рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ (рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреНрд░реЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж):
рдЖрд╡рд╢реНрдпрдХ рдлреЛрди
Google рдкрд┐рдХреНрд╕реЗрд▓ 2;
Google рдкрд┐рдХреНрд╕реЗрд▓ 2 XL;
Google рдкрд┐рдХреНрд╕реЗрд▓
Google рдкрд┐рдХреНрд╕реЗрд▓ XL
рдиреЛрдХрд┐рдпрд╛ 7 рдкреНрд▓рд╕;
рд╡рдирдкреНрд▓рд╕ 6;
рдУрдкреНрдкреЛ рдЖрд░ 15 рдкреНрд░реЛ;
рд╕реЛрдиреА рдПрдХреНрд╕рдкреАрд░рд┐рдпрд╛ рдПрдХреНрд╕рдЬрд╝реЗрдб 2;
рд╡рд┐рд╡реЛ X21UD;
рд╡рд┐рд╡реЛ X21;
Xiaomi Mi Mix 2S
рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ Android P рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕
рдпрд╣рд╛рдВ рдЬрд╛рдПрдВ рдФрд░ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП "рдмреАрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЗрд╕реЗ рд╣рд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдпрд╛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд░реЛрд▓ рдХрд░рдирд╛ - рдкрд╕рдВрдж рдЖрдкрдХреА рд╣реИред рд╕рд╛рдЗрдЯ рдкрд░ рдирд┐рд░реНрджреЗрд╢ рд╕рдВрд▓рдЧреНрди рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкреА рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рдиреЗ рдПрдореБрд▓реЗрдЯрд░ рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╕реЗрдЯрдЕрдк рдирд┐рд░реНрджреЗрд╢ред
2. рдзрдорд╛рдХреЗ рдкрд░ рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд╛рд▓реВ рдХрд░реЗрдВ (рдпрджрд┐ рдХреЛрдИ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд╣реАрдВ рд╣реИ)
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЬрд╛рдПрдВ -> рдбреЗрд╡рд▓рдкрд░ рд╡рд┐рдХрд▓реНрдк -> рдПрдХ рдХрдЯрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВред
рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
- рдХреЛрдирд╛
- рджреЛрд╣рд░рд╛
- рд▓рдВрдмрд╛

рд╡реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддреЗ рд╣реИрдВ:
рдХреЛрдирд╛ | рджреЛрд╣рд░рд╛ | рд▓рдВрдмрд╛ |
---|
 |  |  |
3. рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓реЛ
рдмреЗрд╢рдХ, рдпрд╣ рдорд╛рдорд▓рд╛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рд╕рд░рд▓ рддрд░реНрдХ рд╣реИ, рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрд╛рддреНрд░рд╛ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдорд┐рд▓реЗ рдереЗред
рдЕрдиреНрд╡реЗрд╖рдг | рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ |
---|
 |  |
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рдЦрд╛рдорд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреНрдпрд╛ рд╣реИрдВред
CompileSdkVersion рдХреЛ рдЙрдард╛рдП рдмрд┐рдирд╛
20 API рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░,
WindowInsets рд╡рд░реНрдЧ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ
Rect рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕реБрд▓рдн рдФрд░ рджреБрд░реНрдЧрдо рднрд╛рдЧреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░, рдРрд╕реЗ рддрд░реАрдХреЗ рджреГрд╢реНрдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд╕реНрдХреНрд░реАрди рдХреЗ рджреБрд░реНрдЧрдо рднрд╛рдЧреЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
WindowInsets dispatchApplyWindowInsets(WindowInsets); WindowInsets onApplyWindowInsets(WindowInsets); void requestApplyInsets(); void setOnApplyWindowInsetsListener(OnApplyWindowInsetsListener);
рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ ред
рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:
a) рдЯреИрдЧ
android:fitsSystemWindows="true"
рдЕрдкрдиреЗ рд▓реЗрдЖрдЙрдЯ рдпрд╛ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ;
рдмреА) рдЗрд╕реЗ рдХреЛрдб рд╕реЗ рдХрд░реЗрдВ:
layout.setFitsSystemWindows(true); layout.requestApplyInsets();
рдпрд╣ рдерд╛ | рдмрди рдЧрдпрд╛ рд╣реИ |
---|
 |  |
рд╕рдВрд╕реНрдХрд░рдг 28 рдкрд░ рдХрдВрдкрд╛рдЗрд▓рдПрд╕рдбреЗрдХ рд╡рд░реНрдЬрди рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ
рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддреЛ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреНрдпреЛрдВ рди рд╣реЛрдВ? рд▓реЗрдХрд┐рди рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд╣реИрдВ (рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ), рдЬреЗрдиреЗрдЯ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП, рдпрд╣
рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд
рд╣реИ ред
рддреЛ, рдПрдВрдбреНрд░реЙрдЗрдб рдкреА рдЕрдм рд╣рдореЗрдВ рдХреМрди рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ?
A. WindowManager.LayoutParams рдореЗрдВ 3 рдирдП рдЭрдВрдбреЗ рд╣реИрдВ:
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT - рдЗрд╕ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдмреИрдВрдЧ рдХреЗрд╡рд▓ рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдореЛрдб рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдХреНрд░реАрди рдХреЗ рдКрдкрд░ рд╣реЛрдЧрд╛, рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдХрд╛рд▓реА рдкрдЯреНрдЯреА рд╣реЛрдЧреА;


- LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER - рдЗрд╕ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдлреИрд╢рдиреЗрдмрд▓ рдлреНрд░рд┐рдВрдЬ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рдПрдХ рдХрд╛рд▓реА рдкрдЯреНрдЯреА рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рд╣реЛрдЧрд╛;


- LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - рдЗрд╕ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдмреИрдВрдЧреНрд╕ рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред


рдХреИрд╕реЗ рдХрд░реЗрдВ рдЖрд╡реЗрджрди?
window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
рдЦред рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк A рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрд╢реБрдн рдХрдЯрдЖрдЙрдЯ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдкрдЯреНрдЯреА рдореЗрдВ, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕рдВрджреЗрд╢ рдХреА рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ), рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирдпрд╛
DisplayCoutout рд╡рд░реНрдЧ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдЙрдирдХреЗ рд╕рд╛рде рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд▓реНрдкрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЙрди рдкрд░ рдХреЛрдб рдореЗрдВ
margin
рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
OnApplyWindowInsetsListener
рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ
OnApplyWindowInsetsListener
рдореЗрдВ
OnApplyWindowInsetsListener
рдФрд░
consumeDisplayCutout()
рдХрд░реЗрдВ
consumeDisplayCutout()
ред рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдзрдорд╛рдХреЗ рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
class SampleFragment() : Fragment() { private lateinit var root: ViewGroup override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.sample_fragment, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) root = view.findViewById(R.id.root) addArrowsToCutout() } private fun addArrowsToCutout() { // , attach window, null' val cutoutList = root.rootWindowInsets?.displayCutout?.boundingRects cutoutList?.forEach { addArrow(context!!.getDrawable(R.drawable.left), it.left.toFloat(), it.top + (it.bottom - it.top).toFloat() / 2, ::calculateLeftArrow) addArrow(context!!.getDrawable(R.drawable.right), it.right.toFloat(), it.top + (it.bottom - it.top).toFloat() / 2, ::calculateRightArrow) addArrow(context!!.getDrawable(R.drawable.top), it.left + (it.right - it.left).toFloat() / 2, it.top.toFloat(), ::calculateTopArrow) addArrow(context!!.getDrawable(R.drawable.bottom), it.left + (it.right - it.left).toFloat() / 2, it.bottom.toFloat(), ::calculateBottomArrow) } } private fun addArrow(arrowIcon: Drawable, x: Float, y: Float, calculation: (View, Float, Float) -> Unit) { val arrowView = ImageView(context) arrowView.setImageDrawable(arrowIcon) arrowView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) root.addView(arrowView) arrowView.post { calculation(arrowView, x, y) } } private fun calculateLeftArrow(arrowView: View, x: Float, y: Float) { arrowView.x = x - arrowView.width arrowView.y = y - arrowView.height / 2 } private fun calculateRightArrow(arrowView: View, x: Float, y: Float) { arrowView.x = x arrowView.y = y - arrowView.height / 2 } private fun calculateTopArrow(arrowView: View, x: Float, y: Float) { arrowView.x = x - arrowView.width / 2 arrowView.y = y - arrowView.height } private fun calculateBottomArrow(arrowView: View, x: Float, y: Float) { arrowView.x = x - arrowView.width / 2 arrowView.y = y } }
рдЪрд┐рддреНрд░
рдХреЛрдирд╛ | рджреЛрд╣рд░рд╛ | рд▓рдВрдмрд╛ |
---|
 |  |  |
рдкрд░рд┐рджреГрд╢реНрдп
рдХреЛрдирд╛ |
---|
 |
рджреЛрд╣рд░рд╛ |
---|
 |
рд▓рдВрдмрд╛ |
---|
 |
рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдлреНрд░рд┐рдВрдЬ рд╣рдореЗрдВ рдХреБрдЫ рдЕрд╕реБрд╡рд┐рдзрд╛ рд▓рд╛рдПрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╢рд╛рд░реЗ / рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░ рджреЗрдЧрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рддреИрдпрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХрдорд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрдиреЛрдВ рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╛рдордирд╛ рдХрд░реЗрдВред Google рдЕрдкрдиреЗ Play рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ!