(sem ViewGroups aninhados). - Similar ao RelativeLayout, porém, possui mais recursos e melhor performance. - Facilidade em criar animações com ConstraintSets Por que?
utilizaria RelativeLayout? Overview - Definitivamente! Substituo todos meus layouts por Constraint? - Depende... É interessante substituir seus layouts caso: - Seu LinearLayout utilize weight (Este atributo faz com que o Android tenha que calcular o tamanho do layout duas vezes); - Seu xml tenha mais de um nível de hierarquia
Para posicionar uma view é necessário, ao menos, uma constraint vertical ou horizontal Como funciona? - Possui “excelente” integração com o editor visual (Melhorado com o Project Marble) - E mesmo assim, gera um XML completamente legível
pode ser feito com o layout “pai” (parent) ou outra view do layout (por id) Constraints Alguns exemplos: - constraintTop_toTopOf=”parent” - constraintStart_toEndOf=”@id/text”
ou porcentagem da tela; Barriers Cria uma linha vertical ou horizontal, posicionada por dp ou porcentagem da tela; Groups Com os groups, podemos agrupar logicamente determinadas Views para implementar uma ação;
fluxos do aplicativo Activity -> Fragment (Single Activity) Entendendo o Navigation Possui um modo de visualização, que ajuda a visualizar o fluxo de Fragments no Navigation Graph (XML criado para elaborar seu Navigation) implementation 'android.arch.navigation:navigation-fragment-ktx:1.0.0-beta01' implementation 'android.arch.navigation:navigation-ui-ktx:1.0.0-beta01' Não é necessária a preocupação com o FragmentManager (add, replace)
XML é um XML de navigation Fragment: - Tag de definição das fragments que irão percorrer durante sua navegação Actions: - Tag de definição onde será feita a navegação entre os fragments, também pode setar as animações
que vai receber o fluxo de navegação e inflar os fragments, é necessário ser um fragmente e ter a definição do seu navigation graph criado app:navGraph=“@navigation/yourNagG raph” NavController: - Responsável por tratar as ações do NavHostFragment.
para fazer o fluxo de navegação entre os mesmos, onde você terá que chamar a função navigate(int) onde a mesma espera um Id de navegação definido no Navigation Graph findNavController().navigate(R.id.action_registerEmailFragment_to_registerPasswordFragment) fun Fragment.findNavController(): NavController = NavHostFragment.findNavController(this)
extremamente leve, desenvolvida diretamente para o Kotlin. O que é ? implementation 'org.koin:koin-android-viewmodel:2.0.1' testImplementation 'org.koin:koin-test:2.0.1' androidTestImplementation 'org.koin:koin-test:2.0.1'
do módulo for utilizada - Single: Garante uma instância global única (Singleton) de uma dependência - get(): Resolve as dependências das instâncias definidas Koin Módulos
pode ser cancelada. - Dispatcher -> representa a Thread em que a coroutine executa. - Context -> representa propriedades da execução de coroutines. - Scope -> representa todo o escopo de execução das coroutines, contendo o Job, o Context e o Dispatcher respectivos.
arquivos e requisições de rede. - Dispatchers.Default -> operações que demandam mais processamento de CPU. - Dispatchers.Main -> é a main thread no Android. - Dispatchers.Unconfined -> usada principalmente para testes.
de escopo. - lifecycleScope -> extensão do LifecycleOwners para criação de escopo. - suspend doWork -> função do WorkManager com coroutines. - suspend get/insert/delete -> funções do Room com coroutines.
Injeção de dependência no Kotlin com Koin https://medium.com/collabcode/inje%C3%A7%C3%A3o-de-depend%C3%AAncia-no-kotlin-com-koin- 4d093f80cb63 Understand Kotlin Coroutines on Android (Google I/O’19) https://www.youtube.com/watch?v=BOHK_w09pVA Aplicações assíncronas no Android com Coroutines & Jetpack – Nelson Glauber https://www.slideshare.net/nglauber/aplicaes-assncronas-no-android-com-coroutines-jetpack