name="AppTheme"
parent="
Theme.AppCompat.Light.DarkActionBar
">
name="colorPrimary">@color/colorPrimary
name="colorPrimaryDark">@color/colorPrimaryDark
name="colorAccent">@color/colorAccent
name="AppTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
name="StrongBeatBoxButton"
parent="@style/BeatBoxButton">
- bold
name="AppTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
...
name="AppTheme"
parent="Theme.AppCompat
.Light.DarkActionBar
">
...
name="AppTheme"
parent="Theme.AppCompat">
name="colorPrimary">@color/
colorPrimaryred<
/item>
name="colorPrimaryDark">@color/
colorPrimary
Darkdark_red
name="colorAccent">@color/
colorAccentgray
item>
name="Theme.AppCompat"
parent="Base.Theme.AppCompat" />
Тема
Theme.AppCompat
наследует
атрибуты
от
Base.Theme.AppCompat
. Интересно, что
Theme.AppCompat
не
переопределяет никакие атрибуты, а только содержит ссылку
на своего родителя.
Щелкните мышью по
Base.Theme.AppCompat
с нажатой
клавишей (
Ctrl
). Android Studio сообщит, что тема уточняется
по ресурсам. Существует несколько разных версий этой темы в
зависимости от используемой версии Android.
name="Base.Theme.AppCompat"
parent="Base.V7.Theme.AppCompat">
name="Base.V7.Theme.AppCompat"
parent="Platform.AppCompat">
-
androidx.appcompat.app.AppCompatVie
wInflater
- false
- true
name="windowActionBarOverlay">false
name="Platform.AppCompat"
parent="android:Theme.Holo">
name="android:windowNoTitle">true
name="android:windowActionBar">false
- ?
attr/buttonBarStyle
- ?
attr/buttonBarButtonStyle
name="android:borderlessButtonStyle">?
attr/borderlessButtonStyle
...
name="Platform.AppCompat"
parent="android:Theme.Holo">
...
...
name="android:windowBackground">@color/backgrou
nd_material_dark
name="AppTheme"
parent="Theme.AppCompat">
- @color/red
name="colorPrimaryDark">@color/dark_red
- @color/gray
-
name="android:windowBackground">@color/soothing
_blue
name="Base.V7.Theme.AppCompat"
parent="Platform.AppCompat">
...
name="buttonStyle">@style/Widget.AppCompat.Butt
on
name="buttonStyleSmall">@style/Widget.AppCompat
.Button.Small
...
name="Widget.AppCompat.Button"
parent="Base.Widget.AppCompat.Button"/>
Стиль
Widget.AppCompat.Button
самостоятельно никакие
атрибуты не определяет. Чтобы просмотреть его содержимое,
перейдите к его родителю. Вы увидите, что базовый стиль
существует
в
двух
версиях.
Выберите
версию
values/values.xml
.
name="Base.Widget.AppCompat.Button"
parent="android:Widget">
name="android:background">@drawable/abc_btn_def
ault_mtrl_shape
- ?
android:attr/textAppearanceButton
- 48dip
- 88dip
- true
- true
name="android:gravity">center_vertical|center_h
orizontal
name="AppTheme"
parent="Theme.AppCompat">
name="colorPrimary">@color/red
name="AppTheme"
parent="Theme.AppCompat">
name="colorPrimary">@color/red
name="colorPrimaryDark">@color/dark_red
name="colorAccent">@color/gray
name="android:windowBackground">@color/soothing
_blue
name="BeatBoxButton"
parent="Widget.AppCompat.Button">
name="android:background">@color/dark_bluem>
name="Platform.AppCompat"
parent="android:Theme.Holo">
...
name="AppTheme"
parent="Theme.AppCompat">
...
name="BeatBoxButton"
parent="Widget.AppCompat.Button">
name="AppTheme"
parent="Theme.AppCompat">
...
name="BeatBoxButton"
parent="Widget.AppCompat.Button">
name="android:background">@drawable/button_beat
_box_normal
-
name="android:background">@drawable/button_beat
_box
Упражнение. Предварительная загрузка и кэширование
Пользователи понимают, что не все происходит мгновенно
(или по крайней мере большинство пользователей). Но,
несмотря на это, программисты стремятся к совершенству.
Для достижения моментального отклика в большинстве
реальных приложений приведенный код расширяется в двух
направлениях: добавление кэширования и предварительная
загрузка изображений.
Кэш в нашем приложении представляет собой место для
хранения определенного количества объектов
Bitmap
, чтобы
они оставались в памяти даже после завершения
использования. Объем кэша ограничен, поэтому вам
понадобится стратегия выбора сохраняемых объектов при
исчерпании свободного места. Многие кэши используют
стратегию LRU (Least Recently Used): при нехватке свободного
места из кэша удаляется элемент, который дольше всего не
использовался.
Библиотека поддержки Android содержит класс
LruCache
,
реализующий стратегию LRU. В первом упражнении
используйте
LruCache
для
добавления
простейшего
кэширования
ThumbnailDownloader
. Каждый раз, когда для
URL-адреса загружается объект
Bitmap
, вы помещаете его в
кэш. Затем, когда требуется загрузить новое изображение, вы
сначала проверяете содержимое кэша и смотрите, нет ли его в
кэше.
После того как в программе будет создан кэш, он может
использоваться для предварительной загрузки, то есть загрузки
данных в кэш еще до того, как они фактически потребуются
программе. Тем самым предотвращается задержка для загрузки
объектов
Bitmap
до их вывода.
Качественно реализовать предварительную загрузку
непросто, но она существенно меняет восприятие приложения
пользователем. Во втором, более сложном упражнении для
каждого выводимого элемента
GalleryItem
выполните
предварительную загрузку 10 предшествующих и 10 следующих
элементов
GalleryItem
.
Do'stlaringiz bilan baham: |