Ao longo das aulas temos vindo a utilizar algumas das bibliotecas do Android Jetpack, nesta aula vamos focar-nos essencialmente em trĂŞs:
- Room
- CameraX
- Introdução a Compose
alto se vir ou ouvir alguma coisa ⢠O assÊdio não Ê tolerado ⢠Pratique "Sim e" um ao outro Código de conduta Mais informaçþes: http://bit.ly/2IhF0l3
por semana ⢠14 Outubro a 16 Dezembro ⢠YouTube live ⢠Suporte assĂncrono contĂnuo via Discord/email ⢠Todo o cĂłdigo disponĂvel no GitHub Photo by Arif Riyanto on Unspla O programa
Outubro Bem-vindos ao Android #2 28 de Outubro Fundaçþes I #3 04 de Novembro Fundaçþes II #4 11 de Novembro Fundaçþes III #5 18 de Novembro Listas, listas e mais listas #6 25 de Novembro Jetpack, Jetpack, Jetpack! #7 - #8 02 - 03 de Dezembro Firebase #9 - #10 09 - 10 de Dezembro MLKit & TensorFlow #11 16 de Dezembro Resumo Semana Semana CalendĂĄrio â â â â Direto â â
performance e flexibilidade ⢠Permite criar uma lista de objetos facilmente ⢠Esta lista tanto pode ser horizontal como vertical ⌠Dependendo do LayoutManager definido ⢠à possibilidade adicionar animaçþes (incrĂveis) por cada item modificado RecyclerView
Android ⢠Descarrega, descodifica e mostra ⌠Imagens ⌠GIFâs ⢠Permite tambĂŠm redimensionar imagens ⢠Cache automĂĄtica e simplificada das imagens ⢠ExpĂľe uma API flexĂvel e simples de utilizar Vantagens https://github.com/bumptech/glide
design modernas, as bibliotecas do Android Jetpack permitem menos crashes e memory leaks, com compatibilidade com versĂľes anteriores jĂĄ incluĂdas PorquĂŞ usar Android Jetpack?
design modernas, as bibliotecas do Android Jetpack permitem menos crashes e memory leaks, com compatibilidade com versĂľes anteriores jĂĄ incluĂdas PorquĂŞ usar Android Jetpack? Eliminar cĂłdigo boilerplate O Android Jetpack gere aquelas atividades chatas, como processamento em background, navegação e gestĂŁo do ciclo de vida da aplicação, para que os programadores se possam concentrar no que torna a aplicação espetacular.
design modernas, as bibliotecas do Android Jetpack permitem menos crashes e memory leaks, com compatibilidade com versĂľes anteriores jĂĄ incluĂdas PorquĂŞ usar Android Jetpack? Eliminar cĂłdigo boilerplate O Android Jetpack gere aquelas atividades chatas, como processamento em background, navegação e gestĂŁo do ciclo de vida da aplicação, para que os programadores se possam concentrar no que torna a aplicação espetacular. Reduzir a fragmentação Reduzir a complexidade atravĂŠs de bibliotecas que funcionam de forma consistente nas vĂĄrias versĂľes e dispositivos de Android.
toda a nossa aplicação. Ă Ăłtimo existir uma forma recomenda, opinativa, e clara de construir uma aplicação Android que facilita suportar alteração de configuraçþesâ - Drew Hannay, Engenheiro de Software, LinkedIn https://developer.android.com/jetpack/testimonials LinkedIn Testemunhos
uma grande melhoria. A ĂŞnfase na testabilidade ĂŠ enorme. - Andy Lawton, responsĂĄvel pela plataforma Android no Tinder https://developer.android.com/jetpack/testimonials Tinder Testemunhos
Reduz a quantidade de cĂłdigo repetitivo ⢠Acesso Ă base de dados de forma mais robusta ⢠Valida as consultas em tempo de compilação ⢠Utilizado como cache da aplicação ⢠CompatĂvel com LiveData Room https://developer.android.com/topic/libraries/architecture/room
name ASC") fun getAlphabetizedDogs(): LiveData<List<DogModel>> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: Dog) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
name ASC") fun getAlphabetizedDogs(): LiveData<List<DogModel>> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: DogModel) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
name ASC") fun getAlphabetizedDogs(): LiveData<List<DogModel>> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: DogModel) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
name ASC") fun getAlphabetizedDogs(): LiveData<List<DogModel>> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: DogModel) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
name ASC") fun getAlphabetizedDogs(): LiveData<List<DogModel>> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: Dog) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
class KennelDatabase : RoomDatabase() { abstract fun dogDao(): DogDAO companion object { @Volatile private var INSTANCE: KennelDatabase? = null fun getDatabase(context: Context): KennelDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext,KennelDatabase::class.java, "dog_database" ).build() INSTANCE = instance instance } } val databaseWriteExecutor = Executors.newFixedThreadPool(2) } } Como utilizar? A base de dados KennelDatabase.kt
class KennelDatabase : RoomDatabase() { abstract fun dogDao(): DogDAO companion object { @Volatile private var INSTANCE: KennelDatabase? = null fun getDatabase(context: Context): KennelDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext,KennelDatabase::class.java, "dog_database" ).build() INSTANCE = instance instance } } val databaseWriteExecutor = Executors.newFixedThreadPool(2) } } Como utilizar? A base de dados KennelDatabase.kt
class KennelDatabase : RoomDatabase() { abstract fun dogDao(): DogDAO companion object { @Volatile private var INSTANCE: KennelDatabase? = null fun getDatabase(context: Context): KennelDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext,KennelDatabase::class.java, "dog_database" ).build() INSTANCE = instance instance } } val databaseWriteExecutor = Executors.newFixedThreadPool(2) } } Como utilizar? A base de dados KennelDatabase.kt
class KennelDatabase : RoomDatabase() { abstract fun dogDao(): DogDAO companion object { @Volatile private var INSTANCE: KennelDatabase? = null fun getDatabase(context: Context): KennelDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext,KennelDatabase::class.java, "dog_database" ).build() INSTANCE = instance instance } } val databaseWriteExecutor = Executors.newFixedThreadPool(2) } } Como utilizar? A base de dados KennelDatabase.kt
class KennelDatabase : RoomDatabase() { abstract fun dogDao(): DogDAO companion object { @Volatile private var INSTANCE: KennelDatabase? = null fun getDatabase(context: Context): KennelDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext,KennelDatabase::class.java, "dog_database" ).build() INSTANCE = instance instance } } val databaseWriteExecutor = Executors.newFixedThreadPool(2) } } Como utilizar? A base de dados KennelDatabase.kt
override fun <T : ViewModel> create(modelClass: Class<T>): T { if (modelClass.isAssignableFrom(MainViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return MainViewModel(repository) as T } throw IllegalArgumentException("Unknown ViewModel class") } } Como utilizar? No ViewModelProvider MainViewModel.kt
openNativeCamera() { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } Passamos a criar tudo de raiz...
android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.constraintlayout.widget.ConstraintLayout> Como utilizar? Definir o layout activity_camera.kt
android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.constraintlayout.widget.ConstraintLayout> Como utilizar? Definir o layout activity_camera.kt
⢠Permite construir componentes gråficos de forma declarativa ⢠Interoperåvel com os componentes nativos ⢠Reduz a quantidade de código necessårio para criar interfaces gråficas ⢠Tira partido das vantagens de Kotlin para facilitar a escrita de código ι
Carregar em Android Studio na barra de açþes 2. Preferences 3. Pesquisar por Font 4. Appe... & Behavior â Appearance 5. Alterar para a fonte pretendida
Carregar em Android Studio na barra de açþes 2. Preferences 3. Pesquisar por Font 4. Appe... & Behavior â Appearance 5. Alterar para a fonte pretendida
do teu telemóvel no teu computador ⢠Permite controlares o teu telemóvel remotamente ⢠Funciona em GNU/Linux, Windows e macOS apt install scrcpy //Linux choco install scrcpy //Windows brew install scrcpy //macOS https://github.com/genymobile/scrcpy
⌠BottomNavigationView ⪠Main (MainFragment.kt) ⪠Lista de raças (ListFragment.kt) ⪠Raças favoritas (FavoritesFragment.kt) ⪠About (AboutFragment.kt)