> android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="220dp"
android:scaleType="fitXY"
android:src="@drawable/header"
/> android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_gravity="bottom"
android:background="@color/black_60"
android:ellipsize="end"
android:gravity="center_vertical"
android:padding="@dimen/middle_margin"
android:textColor="@android:color/white"
android:maxLines="2"
android:textSize="14sp"
android:text
tools:text="Международный чемпионат по робототехнике
среди любителей и профессионалов"
/>
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/middle_margin"
android:layout_marginTop="@dimen/middle_margin"
android:textColor="@android:color/black"
tools:text="16 Мая 2016"
/> android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/middle_margin"
android:layout_marginBottom="@dimen/middle_margin"
android:textColor="@android:color/black"
android:textSize="12sp"
android:maxLines="4"
android:ellipsize="end"
tools:text="Вот и пришло время для очередного, пятого,
Международного чемпионата по робототехнике среди любителей и профессионалов,
который пройдёт 21 мая в стенах ИФТиЭ УрГПУ."
/>
77
Код 22. Верстка элемента списка новостей
Рис 18. Верстка элемента списка новостей
Мы создали простой графический интерфейс в макетном редакторе и
настроили свойства компонентов в окне свойств. В XML-файле разметки
используемый по умолчанию компонент RelativeLayout был заменен
компонентом LinearLayout, который затем был настроен для вертикального
расположения представлений. Приложение выводит текст в компоненте
TextView, а изображения — в компоненте ImageView. Мы изменили
компонент TextView графического интерфейса по умолчанию, чтобы текст
выравнивался по центру, увеличенным шрифтом и в одном из цветов
стандартной темы. Компоненты ImageView перетаскивались мышью из
78
палитры компонентов макетного редактора. Как и положено, все строки, и
числовые значения были определены в файлах ресурсов в папке res проекта.
В классе MainActivity задействованы многие средства объектно-
ориентированного программирования на языке Java, включая классы,
объекты, интерфейсы, анонимные внутренние классы и наследование. Также
была представлена концепция заполнения графического интерфейса, то есть
преобразования содержимого файла XML в его экранное представление. Мы
познакомились с классом Android Activity и жизненным циклом активности.
В частности, мы переопределили метод onCreate для инициализации
приложения при запуске. В методе onCreate метод findViewById класса
Activity использовался для получения ссылок на визуальные компоненты, с
которыми приложение взаимодействует на программном уровне. Наконец,
мы отредактировали файл AndroidManifest.xml, чтобы указать, что
MainActivity поддерживает только портретную ориентацию, а класс
MainActivity всегда должен отображать виртуальную клавиатуру. Заодно
были представлены другие элементы, включенные Android Studio в манифест
при создании проекта. Мы показали, как при помощи объекта Configuration
определить, выполняется ли приложение на планшете в альбомной
ориентации. Также в этой главе было показано, как управлять большим
количеством графических ресурсов с использованием вложенных папок в
папке assets приложения и как обращаться к этим ресурсам через
AssetManager. Также были рассмотрены другие папки из папки res
приложения — menu для хранения файлов ресурсов меню, xml для хранения
файлов с разметкой XML. Также мы узнали, как использовать
квалификаторы при создании папки для хранения макета, который должен
использоваться только на больших устройствах в альбомной ориентации. Мы
также показали, как использовать ресурс списка цветов состояний, для того
чтобы гарантировать удобочитаемость текста на кнопках как для доступного,
так и для заблокированного состояния.