Найти в Дзене
Цели и требования Android
В основном, упомянутые методы предназначены для работы с вещами на общем уровне приложения (например, соединение последних частей пользовательского интерфейса в onCreate(), закрытие фоновых потоков в onPause()). Тем не менее, большая часть цели Android заключается в том, чтобы обеспечить бесшовность. Действия могут появляться и исчезать в зависимости от требований к памяти, но пользователи, в идеале, не должны знать, что это происходит. Если, например, пользователь пользовался калькулятором и...
4 года назад
Как работает фоновый поток
В процессе создания Activity мы создаем экземпляр Handler с нашей реализацией handleMessage(). В принципе, при получении любого сообщения мы обновляем ProgressBar на 5 пунктов, а затем выходим из обработчика сообщений. В функции onStart() мы устанавливаем фоновый поток. В реальной системе этот поток будет делать что-то значимое. Здесь же мы просто спим одну секунду, посылаем сообщение в обработчик и повторяем в общей сложности 20 проходов. Это, в сочетании с увеличением положения ProgressBar на...
4 года назад
Как работает показ всплывающих сообщений
Всем привет. С вами Ирина Кострова. Приветствую вас на своем авторском канале про коды. Иногда вашей деятельности (или другому фрагменту кода Android) необходимо высказаться. Не каждое взаимодействие с пользователями Android будет аккуратным, опрятным и сдерживаемым в деятельности, состоящей из представлений. Возникают ошибки. Фоновые задачи могут занять гораздо больше времени, чем ожидалось. Может произойти что-то асинхронное, например, входящее сообщение. В этих и других случаях вам может понадобиться общаться с пользователем за пределами традиционного пользовательского интерфейса...
4 года назад
Вкусы меню
Android рассматривает меню приложений и контекстные меню как меню опций и контекстное меню соответственно. Меню опций вызывается нажатием аппаратной кнопки Меню на устройстве, а контекстное меню вызывается нажатием и удержанием на виджете, вызывающем меню. Кроме того, меню опций работает в одном из двух режимов: значок и развернутое. Когда пользователь впервые нажимает кнопку Меню, появляется режим значка, в котором первые шесть вариантов меню отображаются в виде больших, удобных для пальцев кнопок в сетке в нижней части экрана...
4 года назад
Идентификаторы выбора и группы
Идентификаторы выбора и группы - это ключи, используемые для разблокировки дополнительных функций меню, например, таких как: - Вызов MenuItem#setCheckable() с идентификатором выбора для управления тем, имеет ли выбор меню двухпозиционный флажок рядом с заголовком, где значение флажка переключается, когда пользователь выбирает этот выбор меню. - Вызов Menu#setGroupCheckable() с идентификатором группы превращает набор пунктов меню в пункты с радиокнопкой взаимоисключения между ними, так что один из группы может находиться в состоянии "проверено" в любое время...
4 года назад
Идентификация группы Menu
Учитывая, что вы получили объект Menu через onCreateOptionsMenu(), вы добавляете варианты меню, вызывая add(). Существует множество вариантов этого метода, которые требуют некоторой комбинации следующих параметров: - Идентификатор группы (int), который должен быть NONE, если только вы не создаете определенный сгруппированный набор вариантов меню для использования с setGroupCheckable() (см. следующий список). - Идентификатор выбора (также int) для использования при идентификации этого выбора в обратном вызове onOptionsItemSelected(), когда выбирается выбор меню...
4 года назад
Подключение кода Java
Код Java должен сообщить TabHost, какие представления представляют содержимое вкладки и как должны выглядеть кнопки вкладки. Все это завернуто в объекты TabSpec. Вы получаете экземпляр TabSpec от хоста через newTabSpec(), заполняете его, а затем добавляете в хост в нужной последовательности. Двумя ключевыми методами TabSpec являются: - setContent(), где вы указываете, что будет в содержимом вкладки для этой вкладки, обычно это android:id представления, которое вы хотите показать при выборе этой...
4 года назад
Размещение на планшете
Общая философия Android заключается в том, что действия должны быть короткими и понятными. Если информации больше, чем может поместиться на одном экране, хотя, возможно, и с прокруткой, то, скорее всего, ей место в другом действии, запускаемом с помощью намерения, как будет описано в главе 24. Однако это может быть сложно настроить. Более того, иногда вполне обоснованно требуется собрать много информации, чтобы обработать ее как атомарную операцию. В традиционном пользовательском интерфейсе для этого можно использовать вкладки, например JTabbedPane в Java/Swing...
4 года назад
Виджеты в устройствах с ограниченным вводом
В устройствах с ограниченным вводом, таких как телефоны, очень полезно иметь виджеты и диалоговые окна, которые знают, какой тип данных должен вводить пользователь. Это минимизирует количество нажатий клавиш и касаний экрана, а также снижает вероятность совершения ошибки (например, ввода буквы там, где предполагается вводить только цифры). Как было показано ранее, EditText имеет контентно-ориентированные возможности для ввода цифр, телефонных номеров и т.д. Android также поддерживает виджеты (DatePicker,...
4 года назад
Что делать если convertView нулевой
Будем проверять convertView на "нулевость", и если да, то раздуваем наш ряд - но если он не является нулевым, мы просто используем его повторно. Работа по заполнению содержимого (изображение иконки, текст) одинакова в любом случае. Преимущество в том, что если convertView не является нулевым, мы избегаем потенциально дорогостоящего шага раздувания. Однако этот подход будет работать не во всех случаях. Например, может оказаться, что у вас есть ListView, для которого некоторые строки будут содержать одну строку текста, а другие - две...
4 года назад
Использование шаблона Holder
Еще одна несколько дорогостоящая операция, которую мы часто выполняем с фантазийными представлениями, - вызов findViewById(). Эта операция погружается в наш раздутый ряд и извлекает виджеты по их назначенным идентификаторам, чтобы мы могли настроить содержимое виджета (например, изменить текст в TextView, изменить иконку в ImageView). Поскольку findViewById() может найти виджеты в любом месте дерева дочерних элементов корневого View строки, это может занять достаточно большое количество инструкций, особенно если нам постоянно приходится заново искать виджеты, которые мы уже нашли...
4 года назад
Использование convertView
Это может быть плохо для непосредственного пользовательского опыта, если список кажется вялым. Однако более вероятно, что это плохо из-за использования батареи - каждый бит процессора, который используется, съедает батарею. Это усугубляется тем, что сборщику мусора приходится выполнять дополнительную работу, чтобы избавиться от всех этих дополнительных объектов, которые вы создаете. Поэтому чем менее эффективен ваш код, тем быстрее разряжается батарея телефона, и тем менее счастлив будет пользователь...
4 года назад