Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Custom View Components
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Ana Coimbra
April 24, 2018
Programming
42
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Custom View Components
Talk for Android Meetup Belo Horizonte - Abril 2018
Ana Coimbra
April 24, 2018
More Decks by Ana Coimbra
See All by Ana Coimbra
Realidade Aumentada em dispositivos móveis
anacoimbrag
0
66
Realidade Aumentada & Android
anacoimbrag
0
250
A dive into cors
anacoimbrag
1
200
Como estruturar e manter seguro meus dados no Firebase?
anacoimbrag
0
140
Introdução ao Firebase
anacoimbrag
0
46
Inclusão, engajamento e Colaboração
anacoimbrag
0
48
Design Thinking para Desenvolvedores
anacoimbrag
0
64
Backend as a Service
anacoimbrag
0
54
Material Design Animations
anacoimbrag
0
67
Other Decks in Programming
See All in Programming
SREの越境 / SRE Collaboration
y0hgi
2
310
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
1k
The Rails Doctrine Decade
koic
2
590
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
150
Event is what happens
moro
2
770
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
Next.js: The final boss of Web Performance
guaca
0
250
APNsからLive Activityを開始する話
yumnumm
0
170
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
180
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
How GitHub (no longer) Works
holman
316
150k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
How to Talk to Developers About Accessibility
jct
2
580
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Done Done
chrislema
187
17k
For a Future-Friendly Web
brad_frost
184
10k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Typedesign – Prime Four
hannesfritz
42
3.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Transcript
Custom View Components Android Meetup - Abril 2018
Ana Coimbra #Android | #Web | #IxD #Design | #HeForShe
@anacoimbrag
[email protected]
View
O que é? É a base para qualquer componente de
interface gráfica. São responsáveis por desenhar os componentes e por tratar eventos.
View Widgets ViewGroup TextView Button Spinner LinearLayout FrameLayout RelativeLayout
Desenhando O desenho de uma view é feito percorrendo a
árvore de componentes e gravando qualquer tipo de atualização que deve ser feita
Tratamento de eventos Ao disparar um evento para determinado componente,
ele deve ser tratado e retornado aos listeners.
Porque? Mesmo que dê um certo trabalho, existem vantagens em
criar uma Custom View • Reusabilidade • Encapsulamento • Performance
Como criar? É possível criar custom components de 3 formas
diferentes
Extends View São completamente customizáveis. É necessário pensar em todos
os cálculos de medida e desenho do componente
Extends [ViewGroup] Adicionando um conjunto de widgets é possível criar
um componente que possui um comportamento específico.
Extends [Widget] Dessa forma, é possível aproveitar o comportamento padrão
de determinado widget e fazer customizações mais simples
Antes de começar, temos que lembrar que... O componente deve
encapsular o que for interno e específico dela e prover uma interface para fácil implementação O componente deve usar os recursos de CPU e memória de forma eficiente
O comonente deve ... Estar de acordo com os padrões
do Android Prover atributos de estilo que funcionam no XML Ser compatível com diversas plataformas Ser acessível
Mão na massa!
Criando a sub classe
Criando a sub classe • Criar uma classe que estende
de View, algum ViewGroup ou algum Widget • Criar construtores que recebem o contexto e uma coleção de atributos e passá-los a super classe
Definindo os estilos
Definindo os estilos • Necessário para controlar os atributos e
comportamentos do componente • Especificar os valores que são aceitáveis para cada atributo
Obtendo os estilos
Obtendo os estilos • Recuperar atributos em tempo real •
Aplicar valores dos atributos ao componente • Não recuperar os valores diretos do AttributeSet
Customizando atributos e eventos
Customizando atributos e eventos • invalidate() - importante chamá-lo após
qualquer mudança nas propriedades do componente que modificam sua aparência para que ele possa ser redesenhado de forma correta.
Customizando atributos e eventos • requestLayout() - necessário quando uma
propriedade é modificada que pode alterar o tamanho ou forma do componente
Sendo acessível • Adicionar descrição de conteúdo • Enviar eventos
de acessibilidade • Suportar diferentes tipos de controladores (d-pad, trackball, etc)