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
Motywy i style Androida w praktyce
Search
Mikołaj Kąkol
October 06, 2015
Programming
380
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Motywy i style Androida w praktyce
Mikołaj Kąkol
October 06, 2015
Other Decks in Programming
See All in Programming
気持ちぃ〜角丸 Squircle
ryu1013
0
310
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
140
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
970
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
phperだってパンチカードでコーディングしたい
o0h
PRO
0
340
ジョジョの世界をXRで再現する
mofurune
0
170
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.3k
Jetpack Compose Mechanisms
skydoves
3
820
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
660
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
Featured
See All Featured
Bash Introduction
62gerente
615
220k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
Designing Powerful Visuals for Engaging Learning
tmiket
1
610
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
Designing for Performance
lara
612
70k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Chasing Engaging Ingredients in Design
codingconduct
0
360
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
330
Transcript
Motywy i style Androida w praktyce Mikołaj K ą kol
Definicja stylu <TextView android:layout_width= "match_parent" android:layout_height= "wrap_content" android:padding="16dp" android:textColor="@color/red" android:textSize="28sp"
/>
Definicja stylu <style name="Title"> <item name="android:padding" >16dp</item> <item name="android:textColor" >@color/red</item>
<item name="android:textSize" >28sp</item> </style> <TextView style="@style/Title" android:layout_width= "match_parent" android:layout_height= "wrap_content" />
Kiedy nadawać styl, a kiedy nie elementy UI wyglądają podobnie
i mają taką samą funkcjonalność
Kiedy nadawać styl, a kiedy nie elementy UI wyglądają podobnie
i mają taką samą funkcjonalność
Kiedy nadawać styl, a kiedy nie elementy UI wyglądają podobnie
i mają taką samą funkcjonalność dane elementy powinny wyglądać tak samo
Kiedy nadawać styl, a kiedy nie elementy UI wyglądają podobnie
i mają taką samą funkcjonalność dane elementy powinny wyglądać tak samo
Kiedy nadawać styl, a kiedy nie elementy UI wyglądają podobnie
i mają taką samą funkcjonalność dane elementy powinny wyglądać tak samo widoki mają przypadkowo ten sam zestaw atrybutów
Kiedy nadawać styl, a kiedy nie elementy UI wyglądają podobnie
i mają taką samą funkcjonalność dane elementy powinny wyglądać tak samo widoki mają przypadkowo ten sam zestaw atrybutów
Kiedy nadawać styl, a kiedy nie elementy UI wyglądają podobnie
i mają taką samą funkcjonalność dane elementy powinny wyglądać tak samo widoki mają przypadkowo ten sam zestaw atrybutów ALE…
À propos dziedziczenia... Sposoby definiowania rodzica <style name="Red"> <item name="android:textColor"
>#f00</item> </style> <style name="Green" > <item name="android:textColor" >#0f0</item> </style>
À propos dziedziczenia... Sposoby definiowania rodzica <style name="Red"> <item name="android:textColor">#f00</item>
</style> <style name="Green" > <item name="android:textColor">#0f0</item> </style> <style name="MyStyle" parent="Green" />
À propos dziedziczenia... Sposoby definiowania rodzica <style name="Red"> <item name="android:textColor">#f00</item>
</style> <style name="Green" > <item name="android:textColor">#0f0</item> </style> <style name="MyStyle" parent="Green" /> <style name="Red.MyStyle" />
À propos dziedziczenia... Jaki będzie kolor tekstu? <style name="Red"> <item
name="android:textColor">#f00</item> </style> <style name="Green" > <item name="android:textColor">#0f0</item> </style> <style name="Red.MyStyle" parent="Green" > <item name="android:textColor" >????</item> </style>
Tymczasem motywy <style name="AppTheme" parent="android:Theme.Material" > <item name="android:windowActionBar" >false</item> <item
name="android:windowNoTitle" >true</item> <item name="android:windowBackground" > @android:color/white </item> <item name="android:navigationBarColor" >@color/red</item> </style>
Motywy • kontrolują styl widoków tworzonych przez system • definiują
domyślne style dla widoków • pozwalają nadawać tło system i navigation bar
Motywy • kontrolują styl widoków tworzonych przez system • definiują
domyślne style dla widoków • pozwalają nadawać tło system i navigation bar • należy je wprost przypisać do widoku • mogą używać referencji do motywu Style
¡Hola ?android:attr/… ?attr/…
¡Hola ?android:attr/… ?attr/… deklaracje zmiennych
¡Hola ?android:attr/… ?attr/… deklaracje zmiennych mogą być daklarowane dla motywów
Deklarowanie atrybutów <declare-styleable name="AppThemeAttr" > <attr name="fancyColor" format="reference|color" /> </declare-styleable>
Deklarowanie atrybutów <declare-styleable name="AppThemeAttr"> <attr name="fancyColor" format="reference|color" /> </declare-styleable> <style
name="AppTheme" parent="android:Theme.Material" > <item name="fancyColor">@color/gold</item> </style>
Deklarowanie atrybutów <declare-styleable name="AppThemeAttr"> <attr name="fancyColor" format="reference|color" /> </declare-styleable> <style
name="AppTheme" parent="android:Theme.Material"> <item name="fancyColor">@color/gold</item> </style> <TextView android:text="@string/fancy_txt" android:textColor="?attr/fancyColor" android:layout_width= "match_parent" android:layout_height= "wrap_content" />
Deklarowanie atrybutów <declare-styleable name="AppThemeAttr" > <attr name="fancyColor" format="reference|color" /> </declare-styleable>
<style name="AppTheme" parent="android:Theme.Material" > <item name="fancyColor">@color/gold</item> </style> <TextView android:text="@string/fancy_txt" android:textColor="?attr/fancyColor" android:layout_width= "match_parent" android:layout_height= "wrap_content" />
Tworzenie wielu motywów dla aplikacji <style name="AppTheme.Green" > <item name="fancyColor">@color/green</item>
</style> <style name="AppTheme.Red" > <item name="fancyColor">@color/red</item> </style>
Tworzenie wielu motywów dla aplikacji <style name="AppTheme.Green"> <item name="fancyColor">@color/green</item> </style>
<style name="AppTheme.Red"> <item name="fancyColor">@color/red</item> </style> <activity android:name=".MainActivity" android:theme="@style/AppTheme.Red" android:label="@string/app_name" >
Tworzenie wielu motywów dla aplikacji <style name="AppTheme.Green"> <item name="fancyColor">@color/green</item> </style>
<style name="AppTheme.Red"> <item name="fancyColor">@color/red</item> </style> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) ; setTheme(R.style.AppTheme_Green); setContentView(R.layout. activity_main);
¡Hola ?android:attr/… ?attr/… deklaracje zmiennych mogą być daklarowane dla motywów
¡Hola ?android:attr/… ?attr/… deklaracje zmiennych mogą być daklarowane dla motywów
i stylów
Deklarowanie atrybutów dla stylów <declare-styleable name="MyViewAttr"> <attr name="viewColor" format="reference|color" />
<attr name="makeItCamelCase" format="reference|boolean" /> </declare-styleable>
Deklarowanie atrybutów dla stylów <declare-styleable name="MyViewAttr"> <attr name="viewColor" format="reference|color" />
<attr name="makeItCamelCase" format="reference|boolean" /> </declare-styleable> <com.sample.MyView app:makeItCamelCase= "true" app:viewColor="?attr/fancyColor" android:layout_width= "match_parent" android:layout_height= "wrap_content" />
Deklarowanie atrybutów dla stylów <declare-styleable name="MyViewAttr"> <attr name="viewColor" format="reference|color" />
<attr name="makeItCamelCase" format="reference|boolean" /> </declare-styleable> <com.sample.MyView app:makeItCamelCase="true" app:viewColor="?attr/fancyColor" android:layout_width="match_parent" android:layout_height="wrap_content" /> TypedArray a = context.obtainStyledAttributes(attrs , R.styleable.MyViewAttr); a.getColorStateList(R.styleable. MyViewAttr_viewColor); a.getBoolean(R.styleable. MyViewAttr_makeItCamelCase, false); a.recycle();
Problemy… deklaracje nie mogą się duplikować <declare-styleable name="MyThemeAttr"> <attr name="fancyColor"
format="reference|color" /> </declare-styleable> <declare-styleable name="MyViewAttr"> <attr name="viewColor" format="reference|color" /> <attr name="fancyColor" format="reference|color" /> <attr name="makeItCamelCase" format="reference|boolean" /> </declare-styleable>
Problemy… deklaracje nie mogą się duplikować <declare-styleable name="MyThemeAttr"> <attr name="fancyColor"
format="reference|color" /> </declare-styleable> <declare-styleable name="MyViewAttr"> <attr name="viewColor" format="reference|color" /> <attr name="fancyColor" format="reference|color" /> <attr name="makeItCamelCase" format="reference|boolean" /> </declare-styleable>
Problemy… i rozwiązania ale można je reużywać <declare-styleable name="MyThemeAttr"> <attr
name="fancyColor" format="reference|color" /> </declare-styleable> <declare-styleable name="MyViewAttr"> <attr name="viewColor" format="reference|color" /> <attr name="fancyColor" /> <attr name="makeItCamelCase" format="reference|boolean" /> </declare-styleable>
Problemy… i rozwiązania ale można je reużywać <declare-styleable name="MyThemeAttr"> <attr
name="fancyColor" format="reference|color" /> </declare-styleable> <declare-styleable name="MyViewAttr"> <attr name="viewColor" format="reference|color" /> <attr name="fancyColor" /> <attr name="android:textColorPrimary" /> <attr name="makeItCamelCase" format="reference|boolean" /> </declare-styleable>
więcej problemów • nie można się odwołwać do atrybutów z
elementów typu drawable
więcej problemów • nie można się odwołwać do atrybutów z
elementów typu drawable • chyba, że wspieramy tylko Android 5+
Jaki motyw dobrać do aplikacji? • Material vs Material.Light •
domyślny kolor dla: ◦ dialogów ◦ pop-up’ów ◦ dropdown list • kolorystyka podczas listowania aplikacji ◦ Material = Material.Light.DarkActionBar
Jaki motyw dobrać do aplikacji? • Material vs Material.Light •
domyślny kolor dla: ◦ dialogów ◦ pop-up’ów ◦ dropdown list • kolorystyka podczas listowania aplikacji ◦ Material = Material.Light.DarkActionBar
TIPS • Google Design
TIPS • Google Design • SOURCE CODE!!!
TIPS • Google Design • SOURCE CODE!!! • SOURCE CODE!!!
• SOURCE CODE!!! • SOURCE CODE!!! • i dokumentacja
TIPS • Google Design • SOURCE CODE!!! • AppCompat FTW
AppCompat FTW • ?attr/… • ?attr:selectableItemBackground !!! • ?attr:selectableItemBackgroundBorderless •
theme:
TIPS • Google Design • SOURCE CODE!!! • AppCompat FTW
• Używaj częściej FrameLayout
FrameLayout > LinearLayout
FrameLayout > LinearLayout <LinearLayout android:layout_width= "match_parent" android:layout_height= "wrap_content" android:minHeight="?attr/listPreferredItemHeight" android:padding="@dimen/margin_default"
> <ImageView android:layout_width= "56dp" android:layout_height= "wrap_content" /> <TextView android:layout_width= "match_parent" android:layout_height= "wrap_content" /> </LinearLayout>
FrameLayout > LinearLayout <FrameLayout android:layout_width= "match_parent" android:layout_height= "wrap_content" android:minHeight="?attr/listPreferredItemHeight" >
<ImageView android:layout_marginLeft= "@dimen/margin_default" android:layout_width= "wrap_content" android:layout_height= "wrap_content" /> <TextView android :paddingTop="@dimen/padding_text_vertical" android :paddingBottom= "@dimen/padding_text_vertical" android:layout_marginLeft= "@dimen/margin_avatar" android:layout_marginRight= "@dimen/margin_default" android:layout_width= "match_parent" android:layout_height= "wrap_content" /> </FrameLayout>
Przy okazji FrameLayout > RelativeLayout • zawsze dwie fazy mierzenia
• szczególnie groźne jeżeli znajdzie się gdzieś na szczycie hierarchi
TIPS • Google Design • SOURCE CODE!!! • AppCompat FTW
• Używaj częściej FrameLayout • Gradle pozwala organizować lepiej kod
Gradle
ThreeHardThings in programming 1. Naming things
ThreeHardThings in programming 1. Naming things 2. Off-by-one errors
THE END
PYTANIA?