FrameLayout è progettato per contenere un oggetto figlio. Per esempio, avere Recycler View dentro un FrameLayout ma nient'altro.
CoordinatorLayout è una versione migliorata di FrameLayout. Per lo più è usato per migliorare le prestazioni dell'oggetto figlio. Per esempio, diciamo che abbiamo una ListView e voglio cambiare il comportamento di scorrimento quando avviene un'interazione con l'utente. Posso usare CoordinatorLayout per far sì che ListView si comporti come voglio.
LinearLayout è progettato per allineare gli oggetti figli in una direzione, cioè orizzontalmente o verticalmente. Per esempio, se ho un TextView, un ImageView e un EditText e voglio che siano allineati, posso usare LinearLayout con un orientamento orizzontale per farlo.
RelativeLayout è un po' più complesso dei due precedenti ma ha molte più capacità. RelativeLayout è progettato per allineare l'oggetto figlio rispetto al genitore o alla posizione di qualche altro oggetto figlio. Per esempio, al giorno d'oggi di solito abbiamo un pulsante alla fine dello schermo sul lato destro, il modo in cui questo viene fatto è creare un RelativeLayout come genitore e poi un pulsante al suo interno con i parametri alignParentBotton e alignParentRight = True.
ConstraintLayout è una versione aggiornata di RelativeLayout, cioè fornisce molti più parametri di RelativeLayout e funzionalità migliorate.