SlideShare a Scribd company logo
«Android Design Library. Внедрение material-дизайна».  Максим Юдин
Android Design Library
Внедрение material-дизайна
Максим Юдин
О чем поговорим
com.android.support:design:23.1.0
● Snackbar
● TextInputLayout
● FloatingActionButton
● NavigationView
● CoordinatorLayout
● AppBarLayout
● CollapsingToolbarLayout
● TabLayout
Snackbar
// LENGTH_INDEFINITE, LENGTH_LONG, LENGTH_SHORT
Snackbar.make(view, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
@Override
public void onClick(View v) {
// действие по кнопке Undo
}
})
.setDuration(30000)
.setActionTextColor(ContextCompat.getColor(MainActivity.this, android.R.color.
white))
.show();
Snackbar
Snackbar.make(view, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setCallback(new Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
// DISMISS_EVENT_ACTION - отмена по кнопке действия
// DISMISS_EVENT_CONSECUTIVE - отмена из-за показа другого SnackBar
// DISMISS_EVENT_MANUAL - отмена вручную методом dismiss()
// DISMISS_EVENT_SWIPE - отмена свайпом
// DISMISS_EVENT_TIMEOUT - отмена по таймауту
}
@Override
public void onShown(Snackbar snackbar) {
}
}).show();
TextInputLayout
<android.support.design.widget.TextInputLayout
android:id="@+id/emailWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email"
android:inputType="textEmailAddress"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/passwordWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"/>
</android.support.design.widget.TextInputLayout>
TextInputLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
TextInputLayout passwordWrapper = (TextInputLayout)
findViewById(R.id.passwordWrapper);
EditText etPassword = passwordWrapper.getEditText();
passwordWrapper.setError("Пароль должен быть не
менее 8 символов");
app:errorTextAppearance=”your_text_style”
app:errorEnabled="false"
passwordWrapper.setErrorEnabled(true);
passwordWrapper.isErrorEnabled(true);
passwordWrapper.setHint("Пароль");
passwordWrapper.getHint();
app:hintTextAppearance=”your_text_style”
app:hintAnimationEnabled="false"
passwordWrapper.setHintAnimationEnabled(false);
passwordWrapper.isHintAnimationEnabled(false);
FloatingActionButton
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
app:fabSize="mini | normal"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/ic_favorite"/>
mini - 40 dp, normal - 56 dp, src - 24dp
app:backgroundTint="@color/colorPrimary"
app:backgroundTintMode="multiply"
setBackgroundTintList (ColorStateList tint)
app:rippleColor=”@android:color/background_dark”
app:borderWidth
app:elevation (default 6dp)
app:pressedTranslationZ (default 12dp)
NavigationView
<android.support.v4.widget.DrawerLayout
android:fitsSystemWindows="true" >
<include layout="@layout/content" />
<android.support.design.widget.NavigationView
android:id="@+id/nvMain"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nhMain"
app:menu="@menu/mnuMainNavigation"/>
</android.support.v4.widget.DrawerLayout>
NavigationView
<menu>
<group android:checkableBehavior="single">
<item android:id="@+id/nav_camera"
android:icon="@drawable/ic_menu_camera"
android:title="Import" />
<item android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery" />
</group>
<item android:title="Communicate">
<menu>
<item android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
android:title="Share" />
<item android:id="@+id/nav_send"
android:icon="@drawable/ic_menu_send"
android:title="Send"/>
</menu>
</item>
</menu>
NavigationView
nvMain.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.nav_camеra) {
// Действие по нажатию на элемент
}
DrawerLayout drawer = (DrawerLayout)
findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
});
CoordinatorLayout
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.
com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<! -- Your Scrollable View -->
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
app:layout_scrollFlags="scroll|enterAlways">
<android.support.design.widget.TabLayout
...
app:layout_scrollFlags="scroll|enterAlways">
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
AppBarLayout
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar app:layout_scrollFlags="scroll|enterAlways">
<android.support.design.widget.TabLayout app:layout_scrollFlags="scroll|enterAlways">
</android.support.design.widget.AppBarLayout>
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed|exitUntilCollapsed"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
CollapsingToolbarLayout
<android.support.design.widget.AppBarLayout
android:layout_height="192dp"
android:layout_width="match_parent">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.7"
app:contentScrim="?attr/colorPrimary"
TabLayout
<android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable|fixed" />
TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
tabLayout.setupWithViewPager(viewPager);
Контакты
Спасибо за внимание
google.com/+MaximYudin

More Related Content

PDF
Infinum Android Talks #13 - Design Support Library by Ivan Markusi
PDF
Support Design Library
PDF
8 Things Your Transferees are Thankful For
PPTX
"Пикладная эмпатия" Алексей Аболмасов, «Ёрд»
PPTX
«Прототип за 60 секунд: о вайрфреймах и прототипах»
PPTX
Social media 2.0 february edition
PDF
Никита Корчагин - Introduction to iOS development
PDF
Benefits for Millennials
Infinum Android Talks #13 - Design Support Library by Ivan Markusi
Support Design Library
8 Things Your Transferees are Thankful For
"Пикладная эмпатия" Алексей Аболмасов, «Ёрд»
«Прототип за 60 секунд: о вайрфреймах и прототипах»
Social media 2.0 february edition
Никита Корчагин - Introduction to iOS development
Benefits for Millennials

Viewers also liked (15)

PPTX
180 blue
PDF
E-Guardian Plus Kit Brochure
PPTX
"В поисках эффективности: Slack и BitBucket", Юлия Писаревская, GoodSellUs
PDF
A New Lump Sum for a New Generation
PPTX
Christmas eve presentatie uit Polen
PPTX
Миша Постольный «Контрформа». Харьков.
ODP
Riley slides (2)
PDF
Роман Еникеев - PHP обязан умирать
PPTX
ajax - the basics
PPTX
Расширение Visual studio для ASP.NET Identity
PPTX
Fruit and vegetables
PPTX
First story board pictures
PPTX
Альтернативные способы заваривания кофе
PPTX
Sam mendes
PPTX
Сергей Марков «Pre-sales и старт проекта глазами компании, менеджера, команды»
180 blue
E-Guardian Plus Kit Brochure
"В поисках эффективности: Slack и BitBucket", Юлия Писаревская, GoodSellUs
A New Lump Sum for a New Generation
Christmas eve presentatie uit Polen
Миша Постольный «Контрформа». Харьков.
Riley slides (2)
Роман Еникеев - PHP обязан умирать
ajax - the basics
Расширение Visual studio для ASP.NET Identity
Fruit and vegetables
First story board pictures
Альтернативные способы заваривания кофе
Sam mendes
Сергей Марков «Pre-sales и старт проекта глазами компании, менеджера, команды»
Ad

More from DataArt (20)

PDF
DataArt Custom Software Engineering with a Human Approach
PDF
DataArt Healthcare & Life Sciences
PDF
DataArt Financial Services and Capital Markets
PDF
About DataArt HR Partners
PDF
Event management в IT
PDF
Digital Marketing from inside
PPTX
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
PDF
DevOps Workshop:Что бывает, когда DevOps приходит на проект
PDF
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
PDF
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
PDF
Communication in QA's life
PDF
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
PDF
Знакомьтесь, DevOps
PDF
DevOps in real life
PDF
Codeless: автоматизация тестирования
PDF
Selenoid
PDF
Selenide
PDF
A. Sirota "Building an Automation Solution based on Appium"
PDF
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
PPTX
IT talk: Как я перестал бояться и полюбил TestNG
DataArt Custom Software Engineering with a Human Approach
DataArt Healthcare & Life Sciences
DataArt Financial Services and Capital Markets
About DataArt HR Partners
Event management в IT
Digital Marketing from inside
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
DevOps Workshop:Что бывает, когда DevOps приходит на проект
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
Communication in QA's life
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Знакомьтесь, DevOps
DevOps in real life
Codeless: автоматизация тестирования
Selenoid
Selenide
A. Sirota "Building an Automation Solution based on Appium"
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
IT talk: Как я перестал бояться и полюбил TestNG
Ad

«Android Design Library. Внедрение material-дизайна». Максим Юдин