Внешний вид приложений на андроид
В этом курсе вы познакомитесь с основами дизайна пользовательского интерфейса Android. Вы поймете пользовательский ввод, представления и макеты, а также адаптеры и фрагменты. Проверьте это здесь !
Содержание
1. Введение
В этой последней статье о пользовательском интерфейсе Android мы создадим приложение для Android, которое использует почти все концепции, о которых мы говорили в предыдущих статьях. Мы говорили о наиболее важных аспектах, которые необходимо учитывать при разработке приложения для Android. Мы увидели, как создать структуру пользовательского интерфейса с помощью менеджеров макетов и как мы можем размещать виджеты; мы описали некоторые лучшие практики, которые мы должны использовать при разработке приложения. Итак, приложение, которое мы создадим, будет основано на темах, которые мы уже обсуждали ранее, поэтому взгляните на них еще раз, чтобы освежить вашу память.
2. Структура приложения
Прежде чем углубляться в детали кода, первое, что мы должны учитывать при создании приложения, — это сделать несколько набросков, которые помогут нам понять навигацию приложения и взаимодействие с пользователем. Мы можем использовать несколько инструментов, некоторые из них бесплатны. Кроме того, эти эскизы помогают нам понять, как будет выглядеть наше приложение, и мы могли бы показать их нашим клиентам, чтобы они могли понять, соответствует ли приложение, которое мы хотим построить, их потребностям.
Возвращаясь к нашему приложению To do, мы можем представить, что у нас есть следующие требования:
- Там должен быть список предметов (для выполнения предметов).
- Пользователь может добавить элемент к существующим.
- Предметы должны иметь приоритетный цвет.
- Приложение должно работать на смартфоне и планшете.
Конечно, в реальном приложении требования будут намного сложнее, но это всего лишь ступенька. Мы можем представить простую навигацию, подобную этой:
Это очень простая навигация: при запуске приложение отображает текущий список элементов, а когда пользователь нажимает «Добавить элемент» на панели действий. приложение покажет экран добавления элемента. Для простоты и сосредоточенности на аспектах пользовательского интерфейса мы можем предположить, что приложение не будет сохранять элементы. Читателю может быть интересно расширить приложение, чтобы оно сохраняло элементы.
Теперь, когда мы примерно знаем, какой будет навигация и как будет выглядеть пользовательский интерфейс приложения, мы можем приступить к созданию нашего приложения с помощью нашей IDE. В этом случае мы будем использовать Eclipse + ADT. Мы создаем новый проект Android, который мы можем назвать Todo . Мы не будем рассказывать, как создать проект Android с использованием Eclipse, поэтому мы предполагаем, что вы уже знакомы с этой IDE. Посмотрите наш пример «Android Hello World», если вы не знакомы с процессом.
2.1. Список предметов с ListView и объектной моделью
Теперь у нас есть структура проекта, и мы можем сосредоточиться на разработке модели, стоящей за приложением. В этом случае модель очень проста, это просто класс, который содержит информацию о новом элементе todo:
Это будет основной класс, который мы будем обрабатывать в нашем приложении. Глядя на проект Android, который мы только что создали, мы можем заметить, что под каталогом макетов есть макет по умолчанию, называемый activity_main.xml . Это макет по умолчанию, созданный инструментом.
К настоящему времени мы можем предположить, что у нас есть только список элементов в этом макете: этот макет будет использоваться только для смартфона, и мы рассмотрим позже, когда приложение будет работать на планшете. Расположение элемента списка очень простое, оно просто создается стандартным виджетом ListView :
android:paddingBottom = "@dimen/activity_vertical_margin" android:paddingLeft = "@dimen/activity_horizontal_margin" android:paddingRight = "@dimen/activity_horizontal_margin"Если вы заметили, мы дали указание Android использовать только пространство, необходимое для хранения элементов в списке. Мы знаем, что для использования ListView мы должны реализовать адаптер. Мы могли бы использовать стандартный адаптер, предоставляемый Android, но в этом случае этих стандартных адаптеров недостаточно, мы хотим реализовать собственный адаптер, потому что мы хотели бы показать некоторую информацию для каждой строки в списке. Нам бы хотелось, чтобы строка в списке выглядела так:
Как вы можете заметить, каждая строка имеет изображение слева, которое представляет приоритет задачи и некоторую информацию. В настоящее время мы не рассматриваем применение какого-либо стиля к нашим строкам. Чтобы иметь такую строку в нашем ListView , мы должны создать макет строки, который мы будем использовать в нашем настраиваемом адаптере. Таким образом, мы можем создать новый файл с именем item_layout.xml в директории layout . Этот файл выглядит так:
В этом макете мы используем менеджер RelativeLayout чтобы легко размещать виджеты там, где нам нужно. Как вы можете видеть в этом менеджере компоновки, представления размещаются в соответствии с другими позициями просмотра. Например, мы хотим, чтобы имя нашей задачи было размещено сразу после изображения, поэтому мы используем атрибут:
Более того, мы можем размещать представления относительно родителя, например, мы хотим, чтобы информация о дате была размещена справа от строки и внизу:
Теперь, когда у нас есть макет, мы должны построить адаптер. Мы расширим ArrayAdapter и переопределим некоторые методы, чтобы мы могли обрабатывать данные нашей модели и новый макет. Мы называем этот адаптер ToDoItemAdaper , поэтому мы имеем:
public class ToDoItemAdapter extends ArrayAdapter<Item> < public ToDoItemAdapter(Context context, List<Item> itemList) <Конструктор получает Context и itemList качестве параметров, последний параметр содержит список элементов todo. Вы можете заметить, что когда мы вызываем супер метод, мы R.layout.item_layout пользовательский макет с именем R.layout.item_layout . Теперь нам нужно переопределить один из наиболее важных методов, называемый getView , который используется для создания View и рендеринга макета строки:
public View getView( int position, View convertView, ViewGroup parent) < LayoutInflater inf = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); TextView nameTv = (TextView) v.findViewById(R.id.nameView); TextView descrView = (TextView) v.findViewById(R.id.descrView); TextView dateView = (TextView) v.findViewById(R.id.dateView); h.tagView.setBackgroundResource(itemList.get(position).getTag().getTagColor()); h.dateView.setText(sdf.format(itemList.get(position).getDate()));В этом методе мы проверяем в начале, является ли представление, которое мы получаем как параметр, нулевым. В этом случае мы должны надуть наш макет. Если вы заметили, мы использовали шаблон ViewHolder , чтобы сделать прокрутку ListView более плавной. Мы создали небольшой внутренний класс ItemHolder который содержит ссылки на View внутри нашего пользовательского макета:
Одна вещь, которую вы должны заметить, это то, как мы обрабатывали цвет фона ImageView . Мы использовали setBackgroundResource для установки imageview изображения. Этот метод принимает int, представляющий идентификатор ресурса, который мы хотим использовать в качестве фона:
h.tagView.setBackgroundResource(itemList.get(position).getTag().getTagColor());Глядя на наш класс модели, мы можем заметить, что метод getTag() возвращает экземпляр класса TagEnum . Это перечисление, определенное следующим образом:
GREEN(R.color.green, "Green" ), BLUE(R.color.blue, "Blue" ),YELLOW(R.color.yellow, "Yellow" );В перечислении мы определяем различные цвета, которые мы хотим поддерживать, и в качестве первого параметра мы передаем идентификатор ресурса. Если вы помните, в предыдущей статье мы говорили о том, как определить цвет ресурса в формате XML. Мы уже знаем, что нам нужно создать XML-файл в res/values который мы можем назвать colors.xml :
Даже если результат будет таким же, не рекомендуется использовать жестко закодированные значения в исходном коде. Например, если мы хотим изменить красный цвет на другой, нам нужно будет найти шестнадцатеричный цвет в исходном коде и изменить его, но если бы мы использовали ресурсы для определения цветов, мы бы обратились непосредственно к файлу, содержащему определения цвета и изменить цвет, который нам нравится.
Обратите внимание, что в перечислении мы использовали плохую практику: мы написали непосредственно имя цвета. Мы использовали его специально, чтобы показать вам то, что вы не должны делать. В этом случае, если мы хотим поддерживать многоязычное приложение, нам нужно изменить способ инициализации перечисления, используя имя, записанное в файле строковых ресурсов.
2.2. Поддержка нескольких устройств и особенности компоновки
Помните, что одним из наших требований является создание приложения, которое поддерживает как смартфоны, так и планшеты. Думая о размерах экрана планшета, мы понимаем, что экран слишком большой, чтобы вместить только список элементов, поэтому мы могли бы рассмотреть возможность разделения экрана на две области: одну, в которой содержится список, и другую, которую мы можем использовать для отображения деталей элемента или даже показать пользовательский интерфейс, чтобы добавить новый элемент. Это верно, если мы используем планшеты, но если у нас смартфон, размеры экрана недостаточно велики, чтобы разделить их на две части.
Писать все на одно лицо приложение не очень то и хочется, хочется сделать уникально красивое и удобное, так чтобы с одного вида хотелось его использовать. Именно об этом и пойдет речь в данном уроке, а именно о создании своего стиля для приложения.
Шаг 1: Создание нового проекта
Создаем новое приложение в Intellij IDEA -> Android Module 4.3
Шаг 2: Меняем темную тему на светлую
Теперь давайте разберемся, что такое Темы.
Как же это сделать? Первое что можно сделать это поменять к примеру темную тему на светлую. Сделать это можно добавив следующий атрибут в AndroidManifest, изначально он выглядит так:
По умолчанию у нас стоит темная тема, мы сейчас поставим светлую, для это добавим в AndroidManifest следующую строку:
В строке 10 мы говорим, что MainActivity будет иметь светлое оформление, вот такое:
И теперь если добавить кнопку то выглядеть она будет так:
Шаг 3: Создаем новое Activity
Теперь создадим новый layout:
Выглядеть новый layout будет так:
Теперь создадим новое Activity LastActivity:
И в AndroidManifest незабываем добавлять новые activity:
Шаг 4: Делаем переход на новое Activity
Теперь на добавленную кнопку на main.xml добавим обработчик на клик:
и укажем кнопки чтобы при клике выполнялся goToLastActivity() метод:
Теперь при клике на кнопку New Theme будет открываться новое Activity.
Шаг 5: Делаем с Activity Dialog
Давайте изменим новому Activity lastactivity.xml вид диалогового окна.
Для этого зайдите в AndroidManifest и в для нового Activity, а именно LastActivity установите следующую тему:
После этого мы получим следующий вид данного activity:
Шаг 6: Меняем иконку приложения
Для этого копируем новую иконку в папки drawable-hdpi, drawable-ldpi, drawable-mdpi, drawable-xhdpi для того чтобы эта иконка отображалась на любом размере дисплея.
Дальше в AndroidManifest нужно изменить эту строку, где вы должны указать имя вашей картинки:
Изменить внешний вид любого приложения Андроид можно с помощью Resflux. Я думаю, нет необходимости в очередной раз расписывать достоинства операционной системы Android – они всем известны, и одним из самых значимых из них, конечно же, является возможность настройки её внешнего вида с помощью различных приложений, виджетов и тем.
Мало того – если вы всегда мечтали иметь возможность менять внешний вид любых приложений, добавив, например, в звонилку логотип своего мобильного оператора, изменить цвет цифр в часах на розовый, или - перевести любимое приложение на «падонкафский изыг», то теперь вам не нужно осваивать азы создания Android приложений: всё это вы можете сделать с помощью одного единственного модуля Xposed framework, под наименованием Resflux.
Как многие из вас уже догадались, для этого нам, прежде всего, понадобится root доступ на смартфоне или планшете, а также – предустановленный Xposed framework.
Как установить Xposed framework и его модули вы можете почитать в этом материале . После того, как фреймворк и модуль Resflux (скачать который можно или из самого Xposed или отсюда ) будут установлены, можно будет приступать к работе.
Запустив Resflux, тапните по кнопке «Laboratory», для того, чтобы создать новые темы для ваших приложений или изменить внешний вид её кнопок, надписей и других ресурсов. Кнопки Import и Export вам понадобятся позже, когда наберетесь опыта.
Resflux предложит вам открыть исходный пакет (приложение) из списка имеющихся на вашем устройстве. Выберите из них то, которое вы хотели бы изменить.
Следующий шаг займет некоторое время, которое понадобится Resflux, чтобы проанализировать ваше приложение и «разобрать» его на части. Как только анализ будет закончен, вы увидите экран подобный правому скриншоту:
Пять кнопок, расположенных сверху имеют следующее назначение (слева направо):
1. Кнопка для просмотра и редактирования графических элементов, таких как значки и кнопки, внешний вид которых можно заменить изображением, имеющемся на вашем устройстве (да, кое что вам придется приготовить заранее).
2. Кнопка для редактирования текстовых ресурсов. Она пригодится тем, кто занимается переводом приложений, или тем, кто хотел бы, чтобы весь текст в программах имел неповторимое, оригинальное начертание.
3. Кнопка замены цветов позволяет просматривать и менять цвет различных элементов в приложениях.
4. и 5. Кнопки для редактирования различных значений – булевых и числовых, таких как, например время различных событий и действий.
При работе с Resflux вы можете не переживать, о том, что вы что-нибудь испортите неумелыми действиями: каждый редактируемый элемент можно вернуть к первоначальному состоянию с помощью кнопки сброса («Reset»).
Вернемся к главному экрану приложения. Кнопка «Export» предназначена для экспортирования (сохранения) измененного вами приложения в виде, пригодном для использования на других устройствах, публикации для общего пользования и т.п. Соответственно, кнопка «Import» понадобится для импортирования apk файлов.
ОС Android легко кастомизируется, для этого существует огромное количество приложений, в том числе и лаунчеры. Обычно пользователи предпочитают стандартные лаунчеры в стиле чистого Android, такие как Nova Launcher или Lawnchair, но кроме них существует множество необычных и странных, но интересных альтернатив, которые мы сегодня рассмотрим.
Этот лаунчер представляет из себя простой минималистичный набор кликабельных строк. На главном экране посередине находятся программы, которые пользователь может разместить или удалить по своему желанию, а сверху располагается различная информация. Жест влево от правого края открывает меню всех приложений, где можно ориентироваться по алфавиту, либо через поиск. Долгое удержание в области левого края главного экрана открывает меню настроек, где можно отключить или включить определённые элементы интерфейса.
Computer Launcher имитирует внешний вид операционной системы Windows 10, о чём говорит строка состояния внизу, наличие папки «Этот компьютер» (встроенный файловый менеджер) и меню «Пуск», в котором доступны все приложения. На главном экране по умолчанию располагаются часы, виджет поиска и некоторый список приложений, который можно редактировать. По нажатию кнопки в правом нижнем углу доступны переключатели Wi-Fi, Bluetooth и прочих параметров.
AIO Launcher
AIO Launcher также весьма минималистичен, но при этом здесь есть огромное количество разделов с разной информацией или возможными доступными действиями, в правом нижнем углу можно открыть поиск по приложениям или различной информации в интернете. Жест вправо от левого края открывает список приложений, где можно ориентироваться по алфавиту. Настройка лаунчера происходит посредством перемещения разделов вправо, после чего открывается панель перемещения раздела и его настройки.
Лаунчер выполнен в серых тонах, в том числе таким цветовым фильтром обладают и иконки приложений. На главном экране можно создать или удалить папки, в которых размещаются приложения. Доступ ко всему списку приложений осуществляется через папку «App Box». В нижней части лаунчера имеется поиск по приложениям и кнопка для настройки главного экрана и самого лаунчера. Первые три пункта отвечают за тему главного экрана, четвёртый позволяет создать папку, а пятый предоставляет доступ к настройкам.
По моему мнению, ap15 — самый красивый из минималистичных лаунчеров. В нём нет ничего лишнего, кроме списка приложений на главном экране, который представлен в виде чего-то вроде пузырей разного размера. Сам размер регулируется автоматически, в зависимости от того, насколько часто вы пользуетесь приложением.
Как уже можно было догадаться, этот лаунчер имитирует командную строку терминала Linux. Чтобы найти нужное приложение, нужно ввести его название в строке внизу, после чего оно отобразится внизу и его можно будет запустить. После запуска приложение остаётся в нижней панели для того, чтобы у пользователя была возможность быстро запустить его. В верхней части лаунчера отображается различная информация, например, количество свободной оперативной памяти. Остальные возможности (настройка лаунчера и его тем) доступны через команды, список которых можно получить, введя «help».
Из всех представленных, этот лаунчер больше всех похож на обычный. Его особенность заключается в том, что в качестве обоев здесь служат настраиваемые плитки. По умолчанию на их месте стоят картинки, календарь, часы и список часто запускаемых приложений. Иначе говоря, плитки являются неким подобием виджетов. В остальном здесь всё предельно схоже с обычным лаунчером — на главном экране можно настроить сетку приложений, а список всех их них открывается свайпом вверх. Подобно POCO Launcher, в списке приложений доступны различные категории и настройки.
Самый лёгкий лаунчер из представленных, так как, соответствуя названию, в нём почти ничего нет. В отличие от ap15, лаунчер не имеет красивой оболочки, но зато отображает иконки. Главный экран представляет из себя простой список приложений с возможностью навигации по ним посредством поиска. Приложения можно удалять, если долго удерживать палец на одном из них.
В этом лаунчере нет ничего, кроме сетки приложений, в которой можно ориентироваться зажимая палец и перемещая его по ней. Это действие сопровождается приятной анимацией, помогающей ориентироваться в огромном списке приложений.
Niagara Launcher по сути является простым списком приложений с удобной навигацией по алфавиту. При начальной настройке предлагается выбрать избранные приложения, список которых будет открываться по умолчанию. На главном экране вверху имеется виджет часов, справа доступна навигация по списку приложений. Если перейти к конкретной букве и отпустить палец, откроется весь список.
Читайте также: