SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Верстка интерфейса в Android:
  основы и полезные советы




24 ноября 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%

            Google, 1 ноября 2012
Сначала был G1




      320x480
       mdpi
       3.2”
    22 октября 2008
Android 1.6 (Donut)
<supports-screens>




xlargeScreens – начиная с Android 2.3
Режим совместимости




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

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


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

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

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

small – Маленький


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

large – Большой

xlarge – Очень большой
(начиная с Android 2.3)
Как 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
Что со всем этим делать?
Правила, а не позиции

   AbsoluteLayout




   RelativeLayout
   fill_parent
   wrap_content
layout_weight
Избегать физических точек
      px – плохо! dp,sp – хорошо!
      sp – для текста
      dp – для всего остального

          Если очень надо
getResources().getDisplayMetrics().density

                     px = dp*(dpi/160)
Разные ресурсы
для разных устройств
Ресурсы по умолчанию




Размер экрана: normal   Плотность: mdpi
Наборы ресурсов
Название         Значение   Комментарий
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       по умолчанию в телефонах
Наборы ресурсов
Название                  Значение    Комментарий
Smallest width            sw<N>dp     Независимо от ориентации
                                      экрана
                          Examples:
                          sw600dp
                          sw720dp
Available screen width    w<N>dp

                          Examples:
                          w720dp
                          w1024dp
Available screen height   h<N>dp

                          Examples:
                          h720dp
                          h1024dp
Наборы ресурсов
Название                  Значение    Комментарий
Smallest width            sw<N>dp     Независимо от ориентации
                                      экрана
                          Examples:
                          sw600dp
                          sw720dp
Available screen width    w<N>dp

                          Examples:
                          w720dp
                          w1024dp
Available screen height   h<N>dp

                          Examples:
                          h720dp
                          h1024dp


small, medium, large, xlarge – deprecated in Android 3.2
Используйте масштабируемые
        изображения




         9-patch
Изображения,
определенные с помощью XML
Вложенность играет роль
<include />
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>


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>
<include />
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>


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>
<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>
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>
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>
Тестируйте на разных экранах




           ADT rev.21
Тестируйте на разных экранах




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




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




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




  800x480                 640x480     480x320
Спасибо!
bit.ly/devfest
gdg.org.ua
О себе

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

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

Weitere ähnliche Inhalte

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

Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Эльвина Сакаева
 
Tizen for Wearable Development Gear2 Danilov
Tizen for Wearable Development Gear2 DanilovTizen for Wearable Development Gear2 Danilov
Tizen for Wearable Development Gear2 DanilovKirill Danilov
 
Оптимизация графики на практике
Оптимизация графики на практикеОптимизация графики на практике
Оптимизация графики на практикеTimophy Chaptykov
 
Course User interface — Lesson 9
Course User interface — Lesson 9Course User interface — Lesson 9
Course User interface — Lesson 9Oleksandr Lisovskyi
 
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014it-people
 
Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"MobiDev
 
Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Anton Arhipov
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusGlobus
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusGlobus
 
Лекция 4
Лекция 4Лекция 4
Лекция 4itc73
 
Дмитрий Рыжков_WiDi Android Intel
Дмитрий Рыжков_WiDi Android IntelДмитрий Рыжков_WiDi Android Intel
Дмитрий Рыжков_WiDi Android IntelApps4All
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best PracticesMad Devs
 
Yandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим ХромцовYandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим ХромцовMeetup.by
 
004 divs&amp;spans (presentation)
004 divs&amp;spans (presentation)004 divs&amp;spans (presentation)
004 divs&amp;spans (presentation)sivorka
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)AvitoTech
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - GraphicsNoveo
 

Ähnlich wie Верстка для Андроид (20)

Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
Tizen for Wearable Development Gear2 Danilov
Tizen for Wearable Development Gear2 DanilovTizen for Wearable Development Gear2 Danilov
Tizen for Wearable Development Gear2 Danilov
 
Оптимизация графики на практике
Оптимизация графики на практикеОптимизация графики на практике
Оптимизация графики на практике
 
Course User interface — Lesson 9
Course User interface — Lesson 9Course User interface — Lesson 9
Course User interface — Lesson 9
 
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
 
Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"
 
Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)
 
Zwcad+ 2014
Zwcad+ 2014Zwcad+ 2014
Zwcad+ 2014
 
Drupal Vs Other
Drupal Vs OtherDrupal Vs Other
Drupal Vs Other
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", Globus
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", Globus
 
Лекция 4
Лекция 4Лекция 4
Лекция 4
 
Дмитрий Рыжков_WiDi Android Intel
Дмитрий Рыжков_WiDi Android IntelДмитрий Рыжков_WiDi Android Intel
Дмитрий Рыжков_WiDi Android Intel
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
Yandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим ХромцовYandex Map Kit для Android OS - Максим Хромцов
Yandex Map Kit для Android OS - Максим Хромцов
 
004 divs&amp;spans (presentation)
004 divs&amp;spans (presentation)004 divs&amp;spans (presentation)
004 divs&amp;spans (presentation)
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
 

Mehr von Alexey Ustenko

Разработка мобильных приложений в большой компании. Взгляд изнутри.
Разработка мобильных приложений в большой компании. Взгляд изнутри.Разработка мобильных приложений в большой компании. Взгляд изнутри.
Разработка мобильных приложений в большой компании. Взгляд изнутри.Alexey Ustenko
 
Android Support Library
Android Support LibraryAndroid Support Library
Android Support LibraryAlexey Ustenko
 
Content providers in Android
Content providers in AndroidContent providers in Android
Content providers in AndroidAlexey Ustenko
 
Разработка приложений для Android Honeycomb: ActionBar & Fragments
Разработка приложений для Android Honeycomb: ActionBar & FragmentsРазработка приложений для Android Honeycomb: ActionBar & Fragments
Разработка приложений для Android Honeycomb: ActionBar & FragmentsAlexey Ustenko
 
Android application structure
Android application structureAndroid application structure
Android application structureAlexey Ustenko
 

Mehr von Alexey Ustenko (8)

Разработка мобильных приложений в большой компании. Взгляд изнутри.
Разработка мобильных приложений в большой компании. Взгляд изнутри.Разработка мобильных приложений в большой компании. Взгляд изнутри.
Разработка мобильных приложений в большой компании. Взгляд изнутри.
 
Ci for Android
Ci for AndroidCi for Android
Ci for Android
 
Android Support Library
Android Support LibraryAndroid Support Library
Android Support Library
 
Content providers in Android
Content providers in AndroidContent providers in Android
Content providers in Android
 
Разработка приложений для Android Honeycomb: ActionBar & Fragments
Разработка приложений для Android Honeycomb: ActionBar & FragmentsРазработка приложений для Android Honeycomb: ActionBar & Fragments
Разработка приложений для Android Honeycomb: ActionBar & Fragments
 
Android application structure
Android application structureAndroid application structure
Android application structure
 
Android overview
Android overviewAndroid overview
Android overview
 
Android tools
Android toolsAndroid tools
Android tools
 

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