SlideShare a Scribd company logo
Britt Barak
18.12.2016
Wifi: Techiteasy
Rich & Responsive
Layouts
#7
First,
Britt Barak
Britt Barak
Figure 8
Android Academy
Women Techmakers
Jonathan Yarkoni
Android Developer & Advocate
Ironsource
Android Academy Staff
Yonatan Levin
Google Developer Expert &
Android @ Gett
Britt Barak
Android Lead
Figure8
Yossi Segev
Android Developer
Crave
Community Mentors
Eti Negev
Largest Android Community
Android Academy - TLV
TLV - Android Academy
~ 2000 members Join Us:
What Do We Do?
●Android Fundamentals - NOW
● Android UI / UX - 29/1 !
● Community Hackathon - 9/3 !!!
●Android Performance
●Mentors Program
What’s For Today?
●Views
●Styles and themes
●Custom view
●Qualifiers
UI vs. UX
What’s the UX?
What’s the UI?
What’s the UX?
What’s the UI?
What’s the UI?
Hiush Royi!
...and you
are….?
President
Obama...
is this for me?!?!
So when is my birthday
?!?!?!??
And where are my balloons?
What’s the UX?
Capturing users
●Judgement will be served 30 seconds~
○ Visuals will decide
○ functionality means less
●You need to:
○ Captivate
○ Impress
○ Retain
The Players
UI designer
UX designer
Product manager
Developer
Material design
When Using Standards
- Better UX
- Better UI
- Easier Development
- Shorter implementation
- Less bugs
When Using Standards
- Better UX
- Better UI
- Easier Development
- Shorter implementation
- Less bugs
- And better harmony
- designer --- developer --- user
Designer - red lines
This is just the beginning
- Android UI/UX course (29/1)
- Performance course
So Let’s Start!
●Views
●Styles and themes
●Custom view
●Qualifiers
What’s For Today?
Viewz - recap
Rectangle widget
A View:
●Knows to draw itself
●Used for user interaction
●Has (at least) hight and width (match_parent / wrap_content/fixed)
●May has an id (@+id/ means to create an id if it doesn’t exist)
View Group (Layout)
A special kind of view.
Knows to position other views on the screen.
Which Views Do We Have Here?
Let’s see a bit under
the hood...
How does it work?
Measure Layout Draw!
Step 1: Measure
Goal: obtain view size
REF: http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)
Step 1: Measure
Goal: obtain view size,
including its descendants size
REF: http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)
Step 1: Measure
Goal: obtain view size,
including its descendants size,
agreed by its parent.
REF: http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)
Communicate Dimensions
● ViewGroup.LayoutParams
●View.MeasureSpec
ViewGroup.LayoutParams
How big the View wants to be
For each dimension, it can specify one of:
an exact number
MATCH_PARENT
WRAP_CONTENT
MeasureSpec
Parent requirement for child
EXACTLY: exact size
AT MOST: maximum size
UNSPECIFIED: as child wants
How does it work?
Measure Layout Draw!
Step 2: Layout
Goal : set position for view and all its children
●onLayout() is called
REF: http://developer.android.com/reference/android/view/View.html#onLayout(boolean, int, int, int, int)
- View draws itself with size and position from previous steps.
- onDraw(Canvas) is called
Step 3: Draw
REF: http://developer.android.com/reference/android/view/View.html#onDraw(android.graphics.Canvas)
Guide: http://developer.android.com/training/custom-views/custom-drawing.html
Remember:
●Inflating is not cheap
●Lots of children are not cheap
○ Usually : prefer flat vs. deep
View types
●Use the right tool for the right task
● Viewgroups - root view
○ FrameLayout
○ RelativeLayout
○ LinearLayout
Widgets
Button
Imageview
TextView
EditText
Check box
....and also
Time picker
Date picker
Analog clock
Calendar view
main_activity.xml
Some Confusing View Attributes
Weight
Weight
●specifying a size in relation to other objects
●Set layout_height or layout_width to 0dp
To be calculated according to layout_weight.
Weight example
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/green" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/purple" />
</LinearLayout>
Weight example
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:background="@color/green" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/purple" />
</LinearLayout>
Weight example
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@color/green" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/purple" />
</LinearLayout>
Gravity
Gravity
●gravity: gravity of the content of the view it’s used on.
●layout_gravity: sets the gravity of the view in it’s parent.
gravity
vs.
layout_gravity
Padding Vs Margin
Padding vs. margin
●Padding would squeeze the image.
●Margin won’t let you place stuff which touches.
State List
State List Resource
●Sets a color / drawable per the view’s state.
●Defined in .xml file
https://developer.android.com/guide/topics/resources/color-list-resource.html
res/color/button_text.xml
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
res/color/button_text.xml
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/click"
android:textColor="@color/button_text" />
Questions?
●Views
●Styles and themes
●Custom view
●Qualifiers
What’s For Today?
Styles
●a collection of properties of a View or window
consider
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#00FF00"
android:typeface="monospace"
android:text="@string/hello" />
In styles.xml
<resources>
<style name="CodeFont"
parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00FF00</item>
<item name="android:typeface">monospace</item>
</style>
</resources>
Becomes:
<TextView
style="@style/CodeFont"
android:text="@string/hello" />
Inheritance
<style name="GreenText" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
<style name="CodeFont.Red">
<item name="android:textColor">#FF0000</item>
</style>
Question-
Which text color is that:
Which text color is that?
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
The answer is in the manifest!
AndroidManifest.xml
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<!-- .... -->
</application>
styles.xml
<style name="AppTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<style name="Theme.AppCompat" parent="Base.Theme.AppCompat"/>
<style name="Theme.AppCompat.CompactMenu" parent="Base.Theme.AppCompat.CompactMenu"/>
<style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat.Light"/>
<style name="Theme.AppCompat.DayNight.DarkActionBar" parent="Theme.AppCompat.Light.DarkActionBar"/>
<style name="Theme.AppCompat.DayNight.Dialog" parent="Theme.AppCompat.Light.Dialog"/>
<style name="Theme.AppCompat.DayNight.Dialog.Alert" parent="Theme.AppCompat.Light.Dialog.Alert"/>
<style name="Theme.AppCompat.DayNight.Dialog.MinWidth" parent="Theme.AppCompat.Light.Dialog.MinWidth"/>
<style name="Theme.AppCompat.DayNight.DialogWhenLarge" parent="Theme.AppCompat.Light.DialogWhenLarge"/>
<style name="Theme.AppCompat.DayNight.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar"/>
<style name="Theme.AppCompat.Dialog" parent="Base.Theme.AppCompat.Dialog"/>
<style name="Theme.AppCompat.Dialog.Alert" parent="Base.Theme.AppCompat.Dialog.Alert"/>
<style name="Theme.AppCompat.Dialog.MinWidth" parent="Base.Theme.AppCompat.Dialog.MinWidth"/>
<style name="Theme.AppCompat.DialogWhenLarge" parent="Base.Theme.AppCompat.DialogWhenLarge">
</style>
<style name="Theme.AppCompat.Light" parent="Base.Theme.AppCompat.Light"/>
<style name="Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light.DarkActionBar"/>
<style name="Theme.AppCompat.Light.Dialog" parent="Base.Theme.AppCompat.Light.Dialog"/>
<style name="Theme.AppCompat.Light.Dialog.Alert" parent="Base.Theme.AppCompat.Light.Dialog.Alert"/>
<style name="Theme.AppCompat.Light.Dialog.MinWidth" parent="Base.Theme.AppCompat.Light.Dialog.MinWidth"/>
<style name="Theme.AppCompat.Light.DialogWhenLarge" parent="Base.Theme.AppCompat.Light.DialogWhenLarge">
</style>
<style name="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.AppCompat.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="ThemeOverlay.AppCompat" parent="Base.ThemeOverlay.AppCompat"/>
<style name="ThemeOverlay.AppCompat.ActionBar" parent="Base.ThemeOverlay.AppCompat.ActionBar"/>
<style name="ThemeOverlay.AppCompat.Dark" parent="Base.ThemeOverlay.AppCompat.Dark"/>
Themes
●Styles ties to context :
○ For an application or activity
○ Since v-22.1, also to a view
●Basically: many configurations
Material Themes
●@android:style/Theme.AppCompat (dark version)
@android:style/Theme.AppCompat.Light (light version)
@android:style/Theme.AppCompat.Light.DarkActionBar
android:theme="@style/AppTheme"
What’s in a Theme?
●Default color values
●Default widget styles
●Text Appearance Styles
●Window Configuration
●Drawables
Important Colors
● colorPrimary
● colorPrimaryDark
● colorAccent
Important Text Colors
● textColorPrimary
● textColorPrimaryInverse
● textColorSecondary
● textColorSecondaryInverse
More important Colors
● colorControlNormal
○ (defaults to textColorSecondary)
● colorControlActivated
○ (defaults to colorAccent)
● colorControlHighlight
Example
<activity android:theme="@style/AppTheme">
<style name="AppTheme" parent="android:Theme.AppCompat.Light">
<item name="android:colorAccent">@color/pink</item>
<item name="android:editTextStyle">@style/MyEditTextStyle</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowBackground">@color/custom_theme_color</item>
</style>
<color name="custom_theme_color">#b0b0ff</color>
Questions?
Re-using Layouts
Consider This Layout : titlebar.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/titlebar_bg" >
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/gafricalogo" />
</FrameLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/app_bg">
<include layout="@layout/titlebar"/>
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:padding="10dp" />
...
</LinearLayout>
What do we have?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/titlebar_bg" >
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/gafricalogo" />
</FrameLayout>
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
Use merge
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/gafricalogo" />
</merge>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/app_bg">
<include layout="@layout/titlebar"/>
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:padding="10dp" />
...
</LinearLayout>
Now:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
...
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/gafricalogo" />
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:padding="10dp" />
...
</LinearLayout>
Remember:
Questions?
●Views
●Styles and themes
●Custom view
●Qualifiers
What’s For Today?
Custom views - why?
●Encapsulating a specific functionality or attributes
●Performance
https://developer.android.com/training/custom-views/create-view.html#subclassview
Custom views - How?
● Subclass a View or custom widget.
●Define custom attributes.
●Apply custom attributes.
●Add properties and events.
Subclass a View
class PieChart extends View {
public PieChart(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
Use Custom Attributes
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.example.customviews">
</LinearLayout>
Define Custom Attributes
res/values/attrs.xml
<resources>
<declare-styleable name="PieChart">
<attr name="showText" format="boolean" />
<attr name="labelPosition" format="enum">
<enum name="left" value="0"/>
<enum name="right" value="1"/>
</attr>
</declare-styleable>
</resources>
Attributes Format Types
●Resources Types:
○ Fraction
○ Float
○ Boolean
○ Color
○ String
○ Dimension
●Special Types:
○ Flag
○ Enum
○ Reference
Use Custom Attributes
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.example.myapp">
<com.example.customviews.charting.PieChart
app:showText="true"
app:labelPosition="left" />
</LinearLayout>
Apply Custom Attributes
public PieChart(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,R.styleable.PieChart, 0, 0);
try {
mShowText = a.getBoolean(R.styleable.PieChart_showText, false);
mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
} finally {
a.recycle();
}
}
Questions?
Add Properties and Events
Attributes can only be read when the view is initialized.
public boolean isShowText() {
return mShowText;
}
public void setShowText(boolean showText) {
mShowText = showText;
invalidate();
requestLayout();
}
Notify a Change
Measure Layout Draw!
Which step should we re-do?
Notifying a Change
View View
Which step should we re-do?
Re - Draw:
●invalidate()- change in view appearance
→ re-draw.
Notifying a Change
View View
Which step should we re-do?
Notifying a Change
View1 View2 View1 View2
Which step should we re-do?
Notifying a Change
View1 View2 View1 View2View2View1
Which step should we re-do?
re-measure → re-layout→ re-draw
●requestLayout()
Notifying a Change
View1 View2 View1 View2View2View1
Design For Accessibility
Label your input fields using android:contentDescription
Call sendAccessibilityEvent() when appropriate.
Support alternate controllers, such as D-pad and trackball
More here: https://developer.android.com/guide/topics/ui/accessibility/custom-views.html
Questions?
●Views
●Styles and themes
●Custom view
●Responsive design
What’s For Today?
87.6
%
Resource Qualifiers
●w#dp
●h#dp
●land
●port
●sw#dp
Resource Qualifiers
●Screen size
●Pixel density
●Screen orientation
●Platform version
●Locale
●UI Mode - car / TV / watch…
https://developer.android.com/guide/topics/resources/providing-resources.html
Resources Types
●Layouts
●Dimensions
●Menus
●Styles
●Booleans/Strings/Integers
examples
What happens on runtime change?
Remember Activity Lifecycle?
On Configuration Change
Activity is recreated
In order to switch resources!
Remember-
This is the SAME app!
Code base, functionality, etc..
This Is The Same App
●Functionality is the same
●Include layouts
●Use Fragments
Let’s see another example:
How can this work?
Activity
onCreate()
Illustration :)
Activity
onCreate() onDestroy()
Pause
Save state
Inflate
Set data
Restore state
onResume()
Play Clean
resources
onPause()
onResume()
Inflate
Set data
Play
Could be a handful…….
Separate to smaller components!
videoPresenter
Activity
onCreate()
Illustration :)
Activity
onCreate() onDestroy()
Pause
Save state
Inflate
Set data
Restore state
onResume() onPause()
onResume()
Inflate
Set data
init()
onResume() onPause() clean()
init()
onResume()
●Views
●Styles and themes
●Custom view
●Responsive design
What’s For Today?
Fragments-
(Flash back to lesson #4)
What Are They?
Fragments - What Are They?
“A Fragment represents
a behavior or a portion of user interface
in an Activity.”
https://developer.android.com/guide/components/fragments.html
Fragments
●Component with UI and a lifecycle
●Tied to activity lifecycle
How would it look like?
videoFragment
Illustration :)
Activity
onCreate() onDestroy()
Commit
Fragment
VideoFragment
onCreateView() onDestroy()
Pause
Save state
Inflate
Set data
onResume() onPause()
clean()Play
We use fragments
to modularize the activity
View is lower abstraction than Fragment
Fragments know Views.
Views don’t know Fragments.
Any Questions?
Thank You !

More Related Content

Similar to Session #7 rich and responsive layouts

Android material design lecture #2
Android material design   lecture #2Android material design   lecture #2
Android material design lecture #2
Vitali Pekelis
 
Designing an App: From Idea to Market
Designing an App: From Idea to MarketDesigning an App: From Idea to Market
Designing an App: From Idea to Market
EffectiveUI
 
Designing an Android App from Idea to Market
Designing an Android App from Idea to MarketDesigning an Android App from Idea to Market
Designing an Android App from Idea to Market
Tony Hillerson
 
Designing an Android App: From Idea to Market
Designing an Android App: From Idea to MarketDesigning an Android App: From Idea to Market
Designing an Android App: From Idea to Market
Effective
 
Chapter 5 - Layouts
Chapter 5 - LayoutsChapter 5 - Layouts
Chapter 5 - Layouts
Sittiphol Phanvilai
 
Android Made Simple
Android Made SimpleAndroid Made Simple
Android Made Simple
Gabriel Dogaru
 
Advanced #2 - ui perf
 Advanced #2 - ui perf Advanced #2 - ui perf
Advanced #2 - ui perf
Vitali Pekelis
 
Android Introduction
Android IntroductionAndroid Introduction
Android Introduction
Daniela Da Cruz
 
9 Step Guide to Create Ripple View Effect in Android
9 Step Guide to Create Ripple View Effect in Android9 Step Guide to Create Ripple View Effect in Android
9 Step Guide to Create Ripple View Effect in Android
Nine Hertz
 
Fragments: Why, How, What For?
Fragments: Why, How, What For?Fragments: Why, How, What For?
Fragments: Why, How, What For?
Brenda Cook
 
android layouts
android layoutsandroid layouts
android layouts
Deepa Rani
 
Android Apps Development Basic
Android Apps Development BasicAndroid Apps Development Basic
Android Apps Development Basic
Monir Zzaman
 
Android Development
Android DevelopmentAndroid Development
Android Development
Daksh Semwal
 
Android development first steps
Android development   first stepsAndroid development   first steps
Android development first steps
christoforosnalmpantis
 
UI and UX for Mobile Developers
UI and UX for Mobile DevelopersUI and UX for Mobile Developers
UI and UX for Mobile Developers
Mohamed Nabil, MSc.
 
Android Application Development
Android Application DevelopmentAndroid Application Development
Android Application Development
Imranahmed_19
 
Beginning Native Android Apps
Beginning Native Android AppsBeginning Native Android Apps
Beginning Native Android Apps
Gil Irizarry
 
Android 101 - Amrou & Chiheb - IGC
Android 101 - Amrou & Chiheb - IGCAndroid 101 - Amrou & Chiheb - IGC
Android 101 - Amrou & Chiheb - IGC
Amrou Bouaziz
 
Hierarchy viewer
Hierarchy viewerHierarchy viewer
Hierarchy viewer
Badrinath Kulkarni
 
Android L10 - Stores and Gaming
Android L10 - Stores and GamingAndroid L10 - Stores and Gaming
Android L10 - Stores and Gaming
Mohammad Shaker
 

Similar to Session #7 rich and responsive layouts (20)

Android material design lecture #2
Android material design   lecture #2Android material design   lecture #2
Android material design lecture #2
 
Designing an App: From Idea to Market
Designing an App: From Idea to MarketDesigning an App: From Idea to Market
Designing an App: From Idea to Market
 
Designing an Android App from Idea to Market
Designing an Android App from Idea to MarketDesigning an Android App from Idea to Market
Designing an Android App from Idea to Market
 
Designing an Android App: From Idea to Market
Designing an Android App: From Idea to MarketDesigning an Android App: From Idea to Market
Designing an Android App: From Idea to Market
 
Chapter 5 - Layouts
Chapter 5 - LayoutsChapter 5 - Layouts
Chapter 5 - Layouts
 
Android Made Simple
Android Made SimpleAndroid Made Simple
Android Made Simple
 
Advanced #2 - ui perf
 Advanced #2 - ui perf Advanced #2 - ui perf
Advanced #2 - ui perf
 
Android Introduction
Android IntroductionAndroid Introduction
Android Introduction
 
9 Step Guide to Create Ripple View Effect in Android
9 Step Guide to Create Ripple View Effect in Android9 Step Guide to Create Ripple View Effect in Android
9 Step Guide to Create Ripple View Effect in Android
 
Fragments: Why, How, What For?
Fragments: Why, How, What For?Fragments: Why, How, What For?
Fragments: Why, How, What For?
 
android layouts
android layoutsandroid layouts
android layouts
 
Android Apps Development Basic
Android Apps Development BasicAndroid Apps Development Basic
Android Apps Development Basic
 
Android Development
Android DevelopmentAndroid Development
Android Development
 
Android development first steps
Android development   first stepsAndroid development   first steps
Android development first steps
 
UI and UX for Mobile Developers
UI and UX for Mobile DevelopersUI and UX for Mobile Developers
UI and UX for Mobile Developers
 
Android Application Development
Android Application DevelopmentAndroid Application Development
Android Application Development
 
Beginning Native Android Apps
Beginning Native Android AppsBeginning Native Android Apps
Beginning Native Android Apps
 
Android 101 - Amrou & Chiheb - IGC
Android 101 - Amrou & Chiheb - IGCAndroid 101 - Amrou & Chiheb - IGC
Android 101 - Amrou & Chiheb - IGC
 
Hierarchy viewer
Hierarchy viewerHierarchy viewer
Hierarchy viewer
 
Android L10 - Stores and Gaming
Android L10 - Stores and GamingAndroid L10 - Stores and Gaming
Android L10 - Stores and Gaming
 

More from Vitali Pekelis

Droidkaigi2019thagikura 190208135940
Droidkaigi2019thagikura 190208135940Droidkaigi2019thagikura 190208135940
Droidkaigi2019thagikura 190208135940
Vitali Pekelis
 
Droidkaigi 2019
Droidkaigi 2019Droidkaigi 2019
Droidkaigi 2019
Vitali Pekelis
 
Google i o &amp; android q changes 2019
Google i o &amp; android q changes 2019Google i o &amp; android q changes 2019
Google i o &amp; android q changes 2019
Vitali Pekelis
 
Android Q 2019
Android Q 2019Android Q 2019
Android Q 2019
Vitali Pekelis
 
Advanced #6 clean architecture
Advanced #6  clean architectureAdvanced #6  clean architecture
Advanced #6 clean architecture
Vitali Pekelis
 
Advanced #4 GPU & Animations
Advanced #4   GPU & AnimationsAdvanced #4   GPU & Animations
Advanced #4 GPU & Animations
Vitali Pekelis
 
Advanced #2 networking
Advanced #2   networkingAdvanced #2   networking
Advanced #2 networking
Vitali Pekelis
 
Advanced #2 threading
Advanced #2   threadingAdvanced #2   threading
Advanced #2 threading
Vitali Pekelis
 
Advanced #1 cpu, memory
Advanced #1   cpu, memoryAdvanced #1   cpu, memory
Advanced #1 cpu, memory
Vitali Pekelis
 
All the support you need. Support libs in Android
All the support you need. Support libs in AndroidAll the support you need. Support libs in Android
All the support you need. Support libs in Android
Vitali Pekelis
 
How to build Sdk? Best practices
How to build Sdk? Best practicesHow to build Sdk? Best practices
How to build Sdk? Best practices
Vitali Pekelis
 
Di &amp; dagger
Di &amp; daggerDi &amp; dagger
Di &amp; dagger
Vitali Pekelis
 
Android design patterns
Android design patternsAndroid design patterns
Android design patterns
Vitali Pekelis
 
Advanced #3 threading
Advanced #3  threading Advanced #3  threading
Advanced #3 threading
Vitali Pekelis
 
Mobile ui fruit or delicious sweets
Mobile ui  fruit or delicious sweetsMobile ui  fruit or delicious sweets
Mobile ui fruit or delicious sweets
Vitali Pekelis
 
Lecture #4 c loaders and co.
Lecture #4 c   loaders and co.Lecture #4 c   loaders and co.
Lecture #4 c loaders and co.
Vitali Pekelis
 
Session #4 b content providers
Session #4 b  content providersSession #4 b  content providers
Session #4 b content providers
Vitali Pekelis
 
Android meetup
Android meetupAndroid meetup
Android meetup
Vitali Pekelis
 
Android design lecture #3
Android design   lecture #3Android design   lecture #3
Android design lecture #3
Vitali Pekelis
 
From newbie to ...
From newbie to ...From newbie to ...
From newbie to ...
Vitali Pekelis
 

More from Vitali Pekelis (20)

Droidkaigi2019thagikura 190208135940
Droidkaigi2019thagikura 190208135940Droidkaigi2019thagikura 190208135940
Droidkaigi2019thagikura 190208135940
 
Droidkaigi 2019
Droidkaigi 2019Droidkaigi 2019
Droidkaigi 2019
 
Google i o &amp; android q changes 2019
Google i o &amp; android q changes 2019Google i o &amp; android q changes 2019
Google i o &amp; android q changes 2019
 
Android Q 2019
Android Q 2019Android Q 2019
Android Q 2019
 
Advanced #6 clean architecture
Advanced #6  clean architectureAdvanced #6  clean architecture
Advanced #6 clean architecture
 
Advanced #4 GPU & Animations
Advanced #4   GPU & AnimationsAdvanced #4   GPU & Animations
Advanced #4 GPU & Animations
 
Advanced #2 networking
Advanced #2   networkingAdvanced #2   networking
Advanced #2 networking
 
Advanced #2 threading
Advanced #2   threadingAdvanced #2   threading
Advanced #2 threading
 
Advanced #1 cpu, memory
Advanced #1   cpu, memoryAdvanced #1   cpu, memory
Advanced #1 cpu, memory
 
All the support you need. Support libs in Android
All the support you need. Support libs in AndroidAll the support you need. Support libs in Android
All the support you need. Support libs in Android
 
How to build Sdk? Best practices
How to build Sdk? Best practicesHow to build Sdk? Best practices
How to build Sdk? Best practices
 
Di &amp; dagger
Di &amp; daggerDi &amp; dagger
Di &amp; dagger
 
Android design patterns
Android design patternsAndroid design patterns
Android design patterns
 
Advanced #3 threading
Advanced #3  threading Advanced #3  threading
Advanced #3 threading
 
Mobile ui fruit or delicious sweets
Mobile ui  fruit or delicious sweetsMobile ui  fruit or delicious sweets
Mobile ui fruit or delicious sweets
 
Lecture #4 c loaders and co.
Lecture #4 c   loaders and co.Lecture #4 c   loaders and co.
Lecture #4 c loaders and co.
 
Session #4 b content providers
Session #4 b  content providersSession #4 b  content providers
Session #4 b content providers
 
Android meetup
Android meetupAndroid meetup
Android meetup
 
Android design lecture #3
Android design   lecture #3Android design   lecture #3
Android design lecture #3
 
From newbie to ...
From newbie to ...From newbie to ...
From newbie to ...
 

Recently uploaded

GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
Quickdice ERP
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
What is Master Data Management by PiLog Group
What is Master Data Management by PiLog GroupWhat is Master Data Management by PiLog Group
What is Master Data Management by PiLog Group
aymanquadri279
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
lorraineandreiamcidl
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
pavan998932
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
SOCRadar
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 

Recently uploaded (20)

GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
What is Master Data Management by PiLog Group
What is Master Data Management by PiLog GroupWhat is Master Data Management by PiLog Group
What is Master Data Management by PiLog Group
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 

Session #7 rich and responsive layouts

Editor's Notes

  1. You don’t always need to override all of the methods
  2. You don’t always need to override all of the methods
  3. You don’t always need to override all of the methods
  4. You don’t always need to override all of the methods
  5. You don’t always need to override all of the methods
  6. https://medium.com/google-developers/theming-with-appcompat-1a292b754b35#.zgcvvb3ds https://developer.android.com/training/material/theme.html
  7. https://developer.android.com/guide/topics/ui/accessibility/apps.html#custom-views
  8. You don’t always need to override all of the methods
  9. add asynctask lifecycle. - without config change.
  10. add asynctask lifecycle. - without config change.
  11. add asynctask lifecycle. - without config change.