Top Banner
Верстка интерфейса в Android: основы и полезные советы 24 ноября 2012 г.
33

Верстка для Андроид

Jul 04, 2015

Download

Education

Alexey Ustenko

Доклад для конференции UAMobile, 24 ноября 2012 года
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Верстка для Андроид

Верстка интерфейса в Android: основы и полезные советы

24 ноября 2012 г.

Page 2: Верстка для Андроид

Экраны

Google, 1 ноября 2012

ldpi mdpi hdpi xhdpi

small 1.7% 1.0%

normal 0.4% 11% 50.1% 25.1%

large 0.1% 2.4% 3.6%

xlarge 4.5%

Page 3: Верстка для Андроид

Сначала был G1

320x480mdpi3.2”

22 октября 2008

Page 4: Верстка для Андроид

Android 1.6 (Donut)

Page 5: Верстка для Андроид

<supports-screens>

xlargeScreens – начиная с Android 2.3

Page 6: Верстка для Андроид

Режим совместимости

Приложение скомпилировано для Android 1.5

Page 7: Верстка для Андроид

Плотность

ldpi – Low DPI. Низкая плотность

mdpi – Medium DPI. Средняя плотность

hdpi – High DPI. Высокая плотность

xhdpi – Extra High DPI. Очень высокая плотность(начиная с Android 2.2)

Page 8: Верстка для Андроид

Размер

small – Маленький

normal – Нормальный

large – Большой

xlarge – Очень большой(начиная с Android 2.3)

Page 9: Верстка для Андроид

Как Android определяет

xlarge screens are at least 960dp x 720dp

large screens are at least 640dp x 480dp

normal screens are at least 470dp x 320dp

small screens are at least 426dp x 320dp

Page 10: Верстка для Андроид

Что со всем этим делать?

Page 11: Верстка для Андроид

Правила, а не позиции

AbsoluteLayout

RelativeLayout

fill_parentwrap_content

Page 12: Верстка для Андроид

layout_weight

Page 13: Верстка для Андроид

Избегать физических точек

sp – для текста

px = dp*(dpi/160)

getResources().getDisplayMetrics().density

px – плохо! dp,sp – хорошо!

dp – для всего остального

Если очень надо

Page 14: Верстка для Андроид

Разные ресурсы для разных устройств

Page 15: Верстка для Андроид

Ресурсы по умолчанию

Размер экрана: normal Плотность: mdpi

Page 16: Верстка для Андроид

Наборы ресурсовНазвание Значение Комментарий

Size small

normal

large

xlarge начиная с Android 2.3

Density ldpi

mdpi

hdpi

xhdpi начиная с Android 2.2

nodpi независимо от плотности

tvdpi начиная с Android 3.2 (213 dpi)

Orientation land по умолчанию в планшетах

port по умолчанию в телефонах

Page 17: Верстка для Андроид

Наборы ресурсовНазвание Значение Комментарий

Smallest width sw<N>dp

Examples:sw600dpsw720dp

Независимо от ориентации экрана

Available screen width w<N>dp

Examples:w720dpw1024dp

Available screen height h<N>dp

Examples:h720dph1024dp

Page 18: Верстка для Андроид

Наборы ресурсовНазвание Значение Комментарий

Smallest width sw<N>dp

Examples:sw600dpsw720dp

Независимо от ориентации экрана

Available screen width w<N>dp

Examples:w720dpw1024dp

Available screen height h<N>dp

Examples:h720dph1024dp

small, medium, large, xlarge – deprecated in Android 3.2

Page 19: Верстка для Андроид

Используйте масштабируемые изображения

9-patch

Page 20: Верстка для Андроид

Изображения, определенные с помощью XML

Page 21: Верстка для Андроид

Вложенность играет роль

Page 22: Верстка для Андроид

<include />

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width=”match_parent” android:layout_height=”match_parent” >

<include layout="@layout/titlebar"/>

... </LinearLayout>

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/logo" /> </FrameLayout>

Page 23: Верстка для Андроид

<include />

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width=”match_parent” android:layout_height=”match_parent” >

<include layout="@layout/titlebar"/>

... </LinearLayout>

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/logo" /> </FrameLayout>

Page 24: Верстка для Андроид

<merge />

<merge xmlns:android="http://schemas.android.com/apk/res/android">

<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add"/>

<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/delete"/>

</merge>

Page 25: Верстка для Андроид

Fragment

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=”match_parent” android:layout_height="wrap_content"> <com.example.MyFragment android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.example.CustomView android:layout_width="wrap_content" android:layout_height="wrap_content" />

</FrameLayout>

Page 26: Верстка для Андроид

Custom View

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=”match_parent” android:layout_height="wrap_content"> <com.example.MyFragment android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.example.CustomView android:layout_width="wrap_content" android:layout_height="wrap_content" />

</FrameLayout>

Page 27: Верстка для Андроид

Тестируйте на разных экранах

ADT rev.21

Page 28: Верстка для Андроид

Тестируйте на разных экранах

Можно даже запустить эмулятор установив реальные физические размеры экрана

Page 29: Верстка для Андроид

Тестируйте на разных экранах

800x480

Page 30: Верстка для Андроид

Тестируйте на разных экранах$ adb shell am display-size 640x480

800x480 640x480

Page 31: Верстка для Андроид

Тестируйте на разных экранах$ adb shell am display-size 480x320

800x480 640x480 480x320

Page 32: Верстка для Андроид

Спасибо!bit.ly/devfest

gdg.org.ua

Page 33: Верстка для Андроид

О себе

Алексей Устенко

Программист@ustavdnipro.gdg.org.ua