Sto cercando di conoscere il sistema operativo Android e mentre leggevo l'app Google I/O 2014, mi sono imbattuto nello WindowInsets
. Se qualcuno può spiegare cosa sono, allora sarebbe di grande aiuto. Grazie.Cosa sono WindowInsets?
risposta
È possibile conoscere tutto su WindowInsets here.WindowInsets
fornisce l'area sulla finestra che è utilizzabile dall'applicazione. Di per sé non è molto utile. Il vero scopo viene quando si sostituisce View.onApplyWindowInsets
o si implementa View.OnApplyWindowInsetsListener
. Si può leggere su di loro qui: View.onApplyWindowInsets e View.OnApplyWindowInsetsListener
Listener per l'applicazione di inserti finestra su una vista in un modo personalizzato.
Le app possono scegliere di implementare questa interfaccia se desiderano applicare la politica personalizzata al modo in cui le finestre vengono trattate per una vista. Se è impostato un OnApplyWindowInsetsListener, verrà chiamato il metodo onApplyWindowInsets anziché il metodo onApplyWindowInsets. Il listener può chiamare facoltativamente il metodo ViewViewApplyWindowInsets per applicare il comportamento normale della vista come parte .
In breve, ignorando questa opzione è possibile controllare l'area della finestra disponibile per la visualizzazione.
WindowInsets
sono insiemi (o dimensioni) di viste di sistema (ad esempio barra di stato, barra di navigazione), che vengono applicati alla finestra.
Sarebbe facile da capire sull'esempio concreto. Immagine questo scenario:
Ora, non si vuole WindowInsets
da applicare allo sfondo ImageView
, perché in tal caso il ImageView
sarebbe imbottita per l'altezza barra di stato.
Ma si desidera applicare gli inserimenti a Toolbar
, perché altrimenti Toolbar
verrebbe disegnato da qualche parte sulla barra di stato.
La vista dichiara il desiderio di applicare WindowInsets
in xml dicendo:
android:fitsSystemWindows="true"
In questo esempio, non è possibile applicare la WindowInsets
al layout radice, perché il layout radice sarebbe consumare WindowInsets
, e il ImageView
sarebbe imbottito.
Invece è possibile utilizzare ViewCompat.setOnApplyWindowInsetsListener
per applicare inserti di barra degli strumenti:
ViewCompat.setOnApplyWindowInsetsListener(toolbar, (v, insets) -> {
((ViewGroup.MarginLayoutParams) v.getLayoutParams()).topMargin =
insets.getSystemWindowInsetTop();
return insets.consumeSystemWindowInsets();
});
Nota, questo callback sarebbe chiamato, quando il layout radice Toolbar
s' passa WindowsInsets
ai suoi figli. Layout come FrameLayout
, LinearLayout
no, DrawerLayout
, CoordinatorLayout
fare.
È possibile sottoclasse il layout, ad es.FrameLayout
e sovrascrivere onApplyWindowInsets
:
@TargetApi(Build.VERSION_CODES.KITKAT_WATCH)
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
int childCount = getChildCount();
for (int index = 0; index < childCount; index++)
getChildAt(index).dispatchApplyWindowInsets(insets); // let children know about WindowInsets
return insets;
}
C'è un nice blog post at medium da Ian Lago riguardo a questa roba, anche "Becoming a master window fitter" presentazione da Chris Banes.
Ho anche creato a detailed article at Medium relativo a WindowInset
s.
Altre risorse:
- 1. Cosa sono i concetti?
- 2. Cosa sono i guids?
- 3. Cosa sono [] in C#?
- 4. Cosa sono `+:` e `-:`?
- 5. Cosa sono ICS_R1 ICS_R2?
- 6. Cosa sono skolems?
- 7. Cosa sono "downs funargs"?
- 8. Cosa sono CoreDataGeneratedAccessors?
- 9. cosa sono uri, contentValues
- 10. Cosa sono le "astrazioni"?
- 11. Cosa sono gli oggetti impliciti? Cosa significa?
- 12. Cosa sono TestExecutionListeners e cosa fanno?
- 13. Cosa sono i file FTL
- 14. Cosa sono i moduli CSS3?
- 15. Cosa sono i file .axf?
- 16. Cosa sono gli operatori sollevati?
- 17. Cosa sono le citazioni F #?
- 18. Cosa sono gli oggetti immutabili?
- 19. NSComparisonResult e NSComparator - cosa sono?
- 20. Cosa sono i fori GC?
- 21. Cosa sono le tipizzazioni dattiloscritte?
- 22. Cosa sono Eff e Aff?
- 23. Per cosa sono utilizzati index.ts?
- 24. Cosa sono ReservedCodeCacheSize e InitialCodeCacheSize?
- 25. Cosa sono gli oggetti differiti?
- 26. Cosa sono paddingStart e paddingEnd?
- 27. Cosa sono i modelli vincolati?
- 28. Cosa sono oaidl.idl e ocidl.idl?
- 29. Cosa sono [e] in C#?
- 30. cosa sono class_setIvarLayout e class_getIvarLayout?
Quindi, al fine di applicare l'inserto in un LinearLayout ho bisogno di sottoclasse nel modo giusto? – lupsyn