1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/f059074251-Android-useful-skill

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Android-useful-skill

Java-связанные

  • SparseArray — «Карта» с эффективной оптимизацией. Рекомендуется изучить родственные классы SparseBooleanArray, SpparseIntArray и SparseLongArray.

  • ArrayMap — имеет более высокую эффективность использования памяти по сравнению с HashMap, но работает медленнее и не подходит для работы с большим объёмом данных.

  • SortedList — можно найти в пакете v7.

  • Java 8 предлагает новые интерфейсы LocalDate и LocalTime. Интерфейс Date универсален, но неудобен в использовании. С появлением новых интерфейсов стало проще работать с датами и временем.

Классы инструментов

  • ThumbnailUtils — помогает создавать эскизы изображений. Обычно я использую существующие библиотеки загрузки изображений (например, Picasso или Volley), но этот класс может создавать эскизы видео. Важно отметить, что API стал доступен только с версии V8.

  • MediaMetadataRetriever — используется для получения информации о медиафайлах, такой как название песни, автор, обложка альбома и название, длительность, битрейт и т. д. Для видеофайлов можно получить информацию о ширине и высоте, а также предварительный просмотр.

  • Formatter.formatFileSize — автоматически преобразует размер файла в килобайты, мегабайты или гигабайты. Раньше приходилось рассчитывать размер вручную.

  • Log.getStackTraceString() — удобный инструмент класса Log, методы Log.v(), Log.d(), Log.i(), Log.w() и Log.e() записывают информацию в LogCat. Иногда требуется вставить информацию об ошибке в базу данных или пользовательский файл журнала. В этом случае метод static String getStackTraceString(Throwable tr) возвращает информацию об ошибке в виде строки.

  • PhoneNumberUtils.convertKeypadLettersToDigits — преобразует буквы в цифры, подобно T9.

  • DateUtils.formatDateTime() — используется для форматирования и локализации времени и даты.

  • Pair.create() — удобен для создания пар ключ-значение. Можно использовать для хранения групп данных, но это не ключ-значение в классическом понимании.

  • UrlQuerySanitizer — позволяет проверять URL.

  • PhoneNumberUtils.formatNumber() — форматирует числа.

  • Context.getCacheDir() — получает путь к папке с данными кэша. Папка обычно находится на SD-карте (в широком смысле, включая внешние и внутренние хранилища) в Android/data/имя пакета вашего приложения/cache/. При тестировании можно проверить, успешно ли данные были сохранены в этой папке. Преимущество использования этой папки заключается в том, что не нужно создавать её самостоятельно, и она не будет удалена пользователем. При удалении приложения папка также очищается.

  • Context.getExternalFilesDir() — после запроса разрешения на запись на SD-карту, можно записывать данные в любое место на карте. Это более вежливо по отношению к пользователю, и данные могут быть легко удалены при необходимости. Кроме того, начиная с Android 4.0 Kitkat, данные записываются в эту папку без необходимости в разрешении, и каждый пользователь имеет свой собственный путь для сохранения данных.

  • Environment.getExternalStoragePublicDirectory() — ещё раз о важности предоставления единообразного опыта пользователям на SD-картах. Этот метод позволяет получить правильный каталог для размещения файлов определённого типа (музыка, изображения и т.д.) на устройстве пользователя.

  • AlphabetIndexer — вспомогательный класс для алфавитного индексирования.

Системные инструменты

  • Genymotion — быстрый эмулятор Android, который я постоянно использую.

  • LocalBroadcastManager — предназначен для внутреннего использования в приложениях и обеспечивает более эффективную и безопасную передачу данных.

  • Messenger — инструмент для межпроцессного взаимодействия, основанный на AIDL, но очень удобный в использовании.

  • ViewConfiguration.getScaledTouchSlop() — использует значения из ViewConfiguration для обеспечения согласованности всех сенсорных взаимодействий. Метод определяет, когда пользователь начинает скользить пальцем, чтобы инициировать действие скольжения. Хотя можно определить значение самостоятельно, рекомендуется использовать стандартные значения для согласованности.

  • ActivityManager.getMemoryClass() — сообщает, сколько памяти доступно на вашем устройстве, что полезно при расчёте размера кэша.

  • SystemClock.sleep() — удобно использовать для имитации задержек в сети во время отладки.

  • BroadcastRecevier.setDebugUnregister() — ещё один удобный инструмент для отладки.

  • PackageManager.setComponentEnabledSetting() — позволяет включать и отключать компоненты в списке программ. Полезно для отключения ненужных функций, таких как приёмники широковещательных сообщений.

  • HandlerThread — альтернатива созданию новых потоков с помощью Thread.

  • IntentService — служба, которая может выполнять задачи и завершать работу без необходимости управления дочерними потоками.

  • AccessibilityService — мощный сервис, требующий ручной активации. Используется для различных уведомлений и перехвата состояний, например, для автоматической установки приложений без root-доступа.

Инструменты для активности

  • Activity.recreate — воссоздаёт активность. Может быть полезно после изменения темы приложения, чтобы обновить текущую активность без видимого перезапуска.

  • Activity.startActivities() — часто используется для запуска других активностей в приложении.

  • Context.createConfigurationContext() — позволяет настроить конфигурацию среды. Может пригодиться, если нужно отображать определённые функции только в определённых условиях.

  • ActivityManager.clearApplicationUserData() — очищает пользовательские данные приложения, что может быть полезно для реализации функций выхода и входа.

  • ActivityOptions — определяет анимацию при переключении между активностями. Использование ActivityOptionsCompat решает проблемы совместимости со старыми версиями.

Фрагменты

  • Fragment.setUserVisibleHint — фрагмент может переопределить этот метод и выполнить логику в зависимости от параметра, указывающего, виден ли фрагмент пользователю.

  • DialogFragment.setShowsDialog() — интересный способ использования DialogFragment в качестве обычного фрагмента. Позволяет фрагменту выполнять двойную функцию.

  • FragmentManager.enableDebugLogging() — полезен для наблюдения за состоянием фрагментов.

View

  • Linkify.addLinks() — добавляет ссылки в текст. В тексте запроса используется язык программирования Android.
  1. В текст (Text) можно добавить ссылку (link). Это очень удобно.
  2. StaticLayout — полезен при рендеринге текста в пользовательских представлениях (View).
  3. View.getContext — «по названию понятно, что это такое... Раньше при написании адаптера (Adapter) для RecyclerView я часто передавал внешний контекст (context) в конструктор. Может быть, только я не знал об этом» («Только я не знаю, в чём дело» — шутка).
  4. View.post — удобен для изменения интерфейса пользователя (UI) в фоновом потоке и работает аналогично Handler. Поскольку метод Runnable будет вызываться после отрисовки представления (view), его также можно использовать для получения ширины и высоты представления.
  5. TouchDelegate — используется для изменения области касания представления. Например, если в элементе списка RecyclerView есть компонент CheckBox, то при нажатии на элемент списка можно активировать CheckBox.
  6. ViewDragHelper — перетаскивание представлений является сложной задачей. Этот класс может помочь решить многие проблемы. Если вам нужен пример, то DrawerLayout использует его для реализации скольжения. Flavient Laurent написал несколько статей по этой теме.
  7. PageTransformer — используется для определения эффекта анимации при переключении страниц ViewPager (например, постепенное появление и исчезновение, увеличение и уменьшение). В официальном руководстве есть примеры, которые вы можете посмотреть.
  8. ValueAnimator.reverse() — этот метод позволяет успешно отменить запущенную анимацию.
  9. View.generateViewId() — каждый раз я рекомендую динамически генерировать идентификаторы представлений. Обратите внимание, что они не должны совпадать с существующими идентификаторами представлений или другими сгенерированными идентификаторами.
  10. getParent().requestDisallowInterceptTouchEvent(true) — лишает родительское представление возможности обрабатывать события касания.
  11. Методы clipRect(), clipPath() и clipRegion() в Canvas используются для обрезки областей.
  12. AutoScrollHelper — реализует прокрутку при длительном нажатии на края в прокручиваемых представлениях. Является подклассом Android View.OnTouchListener.

Часть, посвящённая TextView:

  • EditText.setImeOptions — при отображении виртуальной клавиатуры (soft keyboard) при использовании EditText можно изменить содержимое клавиши ввода (enter key). Для этого используется атрибут android:imeOptions=""*. Возможные значения:

    • actionSearch — поиск;
    • actionSend — отправка;
    • actionNext — следующий элемент.
  • TextView.setError() — используется для проверки ввода пользователя.

Атрибуты макета:

  • android:animateLayoutChanges — очень крутой атрибут. После добавления android:animateLayoutChanges="true" к родительскому макету можно настроить анимацию с помощью setLayoutTransition(). Если активирован метод макета (например, дочерний элемент установлен как GONE), система автоматически добавит эффект анимации при изменении макета!
  • android:clipToPadding — определяет, находится ли область рисования внутри отступа. При значении true дочерние элементы будут смещены внутрь, если для родительского элемента задан отступ. Пример: если у вас есть ListView, и вы хотите, чтобы первый элемент находился на расстоянии 10 dp от верхней части экрана, вы можете добавить android:clipToPadding="false" android:paddingTop="10dp" в макет ListView. Разве это не удобно?
  • android:clipChildren (ViewGroup) — если этот атрибут установлен в значение false, дочерние представления ViewGroup будут выходить за его границы при рисовании. Это полезно при создании анимации.
  • android:tileMode (BitmapDrawable) — можно указать режим повторения изображения.
  • android:enterFadeDuration/android:exitFadeDuration (Drawables) — эти атрибуты определяют эффекты затухания при переходе между состояниями в Drawable.
  • -nodpi — без специального указания (-mdpi, -hdpi, -xdpi и т. д.) ресурсы assets/dimensions автоматически масштабируются. Иногда нам нужно сохранить единообразие отображения, и в этом случае мы можем использовать -nodpi. Изображения, помещённые в папку drawable-nodpi, не будут масштабироваться и будут отображаться с исходным размером. Эти два изображения помещаются в папку drawable-nodpi, и их размер остаётся одинаковым на экранах с разным разрешением, без масштабирования, обеспечивая хорошее качество изображения. Однако ширина и высота должны быть указаны как wrap_content, а не dip.
  • Merge — этот тег позволяет включать другие макеты в другой макет, вместо создания нового ViewGroup. Он также используется при определении дочерних элементов пользовательского ViewGroup. Вы можете включить файл макета с тегом в другой файл макета для автоматического определения дочерних компонентов.
  • android:descendantFocusability — когда элементы, такие как CheckBox, в элементах ListView получают фокус, что приводит к тому, что элементы не реагируют на клики, помимо установки focusable для соответствующих элементов, более простым решением является добавление android:descendantFocusability="blocksDescendants" к корневому макету элемента.
  • android:duplicateParentState="true" — позволяет дочерним элементам наследовать состояние родительского элемента, например, нажатое состояние. Распространённым сценарием использования является создание небольшой кнопки и желание расширить область нажатия. Обычно это делается путём добавления события нажатия к родительскому элементу и упаковки кнопки в дополнительный макет. Если вы хотите сохранить эффект селектора при нажатии кнопки, duplicateParentState пригодится. Значение атрибута может быть одним из трёх:
    • beforeDescendantsviewgroup получает фокус перед дочерними элементами;
    • afterDescendantsviewgroup получает фокус только тогда, когда дочерние элементы не нуждаются в фокусе;
    • blocksDescendantsviewgroup перекрывает дочерние элементы и сразу получает фокус.
  • includeFontPadding="false" — по умолчанию у TextView сверху и снизу есть отступы. Иногда мы не хотим оставлять пустое пространство сверху и снизу, и мы можем включить этот атрибут.

Цвета:

  • Bitmap.extractAlpha () — возвращает новый Bitmap, который захватывает альфа-значение исходного изображения. Иногда нам может потребоваться динамически изменять фон элемента изображения, не используя несколько изображений. Мы можем сделать это, объединив Canvas и Paint, используя этот метод для динамического изменения цвета однотонного Bitmap.
  • Palette — используется для извлечения цветов из изображения.
  • ArgbEvaluator — класс, используемый для вычисления значения цвета между двумя заданными цветами. endValue); используется для вычисления интерполяции между различными значениями цвета, в сочетании с ValueAnimator.ofObject или ViewPager.PageTransformer, позволяет реализовать плавный переход между разными цветами.

Используется для создания нового цвета на основе начального значения цвета, конечного значения и смещения, что позволяет имитировать плавное изменение цвета при скольжении по нижней панели приложения, как это реализовано в WeChat.

База данных

CursorJoiner: если вы используете только одну базу данных, то можно использовать join в SQL, но если данные поступают из двух независимых ContentProvider, то CursorJoiner будет очень полезен.

DatabaseUtils: набор инструментов для использования различных операций с базой данных.

SQLiteDatabase.yieldIfContendedSafely(): позволяет временно остановить транзакцию базы данных, чтобы не занимать слишком много системных ресурсов.

Элементы управления

Space: Space — это новый элемент управления, добавленный в Android 4.0, который фактически может использоваться для разделения различных элементов управления и формирования пустой области. Это лёгкий компонент представления, который может пропускать Draw и является отличным выбором для любых сценариев, где требуется заполнитель.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

В разработке Android некоторые классы и методы, которые оказались забытыми, но на самом деле полезны. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/f059074251-Android-useful-skill.git
git@api.gitlife.ru:oschina-mirror/f059074251-Android-useful-skill.git
oschina-mirror
f059074251-Android-useful-skill
f059074251-Android-useful-skill
master