android studio запустить кусок кода
Горячие клавиши (hotkeys) в Android Studio
В таблицах перечислены сочетания клавиш (Key Command) для общих операций Android Studio.
Примечание: Здесь перечислены основные клавиатурные комбинации Android Studio для раскладки клавиатуры по умолчанию. Чтобы изменить раскладку по умолчанию на Windows и Linux, перейдите в File > Settings > Keymap. Если вы используете Mac OS X, обновите вашу раскладку используя раскладку версии Mac OS X 10.5+ в Android Studio > Preferences > Keymap.
Таблица 1. Комбинации клавиш для программирования
Действие | Комбинация клавиш Android Studio |
---|---|
Завершение основного кода (имя любого класса, метода или переменной) | CTRL + Space |
Умное завершение кода (фильтрует список методов и переменных по ожидаемому типу) | CTRL + SHIFT + Space |
Оптимизация импорта | CTRL + ALT + O |
Команда поиска (Автозаполнение имени команды) | CTRL + SHIFT + A |
Быстрое исправление проекта (подсказки по ошибкам) | ALT + ENTER |
Форматирование кода | CTRL + ALT + L (Win) OPTION + CMD + L (Mac) |
Показать документацию для выбранных API | CTRL + Q (Win) F1 (Mac) |
Показать параметры для выбранного метода | CTRL + P |
Создать метод | ALT + Insert (Win) CMD + N (Mac) |
Перейти к источнику | F4 (Win) CMD + down-arrow (Mac) |
Удалить строку | CTRL + Y (Win) CMD + Backspace (Mac) |
Поиск по символу | CTRL + ALT + SHIFT + N (Win) OPTION + CMD + O (Mac) |
Таблица 2. Комбинации клавиш редактора проекта
Источник. Полный перечень горячих клавиш Android Studio для Windows, Linux и MacOS в документации IntelliJ IDEA.
Горячие клавиши Android Studio, которые могут увеличить вашу производительность на 100%
Перевод заметки Шикара Ша с medium.com
Об авторе оригинала: Шикар Ша, Android-разработчик, сертифицированный Google (Shikhar Shah, Google Certified Android Developer).
От переводчика:
Если вы найдёте какие-то неточности в переводе терминов или их искажение, а также искажение смысла статьи-оригинала, то пишите об этом в комментариях или напрямую мне в личные сообщения.
За помощь в устранении синтаксических и пунктационных ошибок спасибо ЗаЕцу 😉
Перевод
Давайте перейдём сразу к делу. Вы здесь не для того, чтобы узнать историю моей жизни. Начнём.
Есть некоторое количество комбинаций горячих клавиш, с которыми я столкнулся, войдя в корпоративный мир. Я выделяю их в две группы.
1. Поисковые горячие клавиши
Не помните, где использовали определённое слово? Используйте эти горячие клавиши, чтобы решить вашу проблему.
i) Ctrl + Shift + F: Когда вы используете эту комбинацию, открывается поисковое окно, где вы можете найти слово, класс или любой другой объект. AS (Android Studio) просмотрит весь проект на предмет нахождения его в проекте.
ii) Shift + Shift: Устали использовать навигационную панель слева? Тогда вы можете добраться до желаемого файла из этого окна, которое открывается с помощью двойного нажатия на Shift. Просто введите начало названия или полное имя желаемого файла и AS в окне выдаст списком результаты поиска. Вы также можете открывать конкретные окна настроек с помощью этой комбинации клавиш.
2. Навигационные горячие клавиши
i) Ctrl + Клик: Доберитесь до файла разметки или Java-файла, кликнув по нему, удерживая клавишу Ctrl.
ii) Alt + вверх/вниз: Спокойно перемещайтесь по заголовкам классов и принадлежащих им методов с помощью этой комбинации.
iii) Alt + вправо/влево: Используйте стрелки вправо/влево в связке с клавишей Alt, чтобы перемещаться по открытым файлам проектов, таким как файл разметки или файл класса.
Активные шаблоны
i) «Toast» + Tab: Набор слова “Toast” и последующее нажатие на клавишу Tab сгенерирует готовый Toast-шаблон.
Существует множество встроенных шаблонов, которые помогут вам в работе, такие как
ii) loge + Tab
iii) logd + Tab
iv) logr + Tab
и многие другие. Прелесть этой фичи заключается в том, что вы можете добавлять свои активные шаблоны в настройки. Просто используйте двойной Shift и зайдите в раздел активных шаблонов (Live Templates), где вы можете добавить свой собственный шаблон.
И самая важная и спасительная комбинация это
которая автоматически полностью дублирует строку, на которой расположен курсор в текущий момент.
На этом всё, ребята.
ПОСЛЕДНИЙ:
Хотите, чтобы ваш код был чистым? Просто используйте
Ctrl + Shift + L
и ваш код в выбранных в текущий момент файлах будет должным образом отформатирован.
Фрагменты
Существует два основных подхода в использовании фрагментов.
Первый способ основан на замещении родительского контейнера. Создаётся стандартная разметка и в том месте, где будут использоваться фрагменты, размещается контейнер, например, FrameLayout. В коде контейнер замещается фрагментом. При использовании подобного сценария в разметке не используется тег fragment, так как его нельзя менять динамически. Также вам придётся обновлять ActionBar, если он зависит от фрагмента. Здесь показан такой пример.
Второй подход является наиболее гибким и в целом предпочтительным способом использования фрагментов. Активность проверяет в каком режиме (свои размеры) он запущен и использует разную разметку из ресурсов. Графически это выглядит следующим образом.
Основные классы
Сами фрагменты наследуются от androidx.fragment.app.Fragment. Существует подклассы фрагментов: ListFragment, DialogFragment, PreferenceFragment, WebViewFragment и др. Не исключено, что число классов будет увеличиваться, например, появился ещё один класс MapFragment.
Как в любом офисе, спецманагер не делает работу своими руками, а использует помощников. Например, для транзакций (добавление, удаление, замена) используется класс-помощник android.app.FragmentTransaction.
Для сравнения приведу названия классов из библиотеки совместимости:
Как видите, разница в одном классе, который я привёл первым. Он используется вместо стандартного Activity, чтобы система поняла, что придётся работать с фрагментами. На данный момент студия создаёт проект на основе ActionBarActivity, который является подклассом FragmentActivity.
В одном приложении нельзя использовать новые фрагменты и фрагменты из библиотеки совместимости.
В 2018 году Гугл объявила фрагменты из пакета androd.app устаревшими. Заменяйте везде на версию из библиотеки совместимости. В 2020 году уже используют пакет androidx.fragment.app.
В версии Support Library 27.1.0 появились новые методы requireActivity() и requireContext(), которые пригодятся при написании кода, когда требуется наличие активности и нужно избежать ошибки на null.
Общий алгоритм работы с фрагментами будет следующим:
У каждого фрагмента должен быть свой класс. Класс наследуется от класса Fragment или схожих классов, о которых говорилось выше. Это похоже на создание новой активности или нового компонента.
Разметку для фрагмента можно создать программно или декларативно через XML.
Создание разметки для фрагмента ничем не отличается от создания разметки для активности. Вот отрывок кода из метода onCreateView():
Глядя на этот код, вы должные понять, что фрагмент использует разметку из файла res/layout/first_fragment.xml, которая содержит кнопку с идентификатором android:id=»@+id/button_first». Здесь также прослеживается сходство с подключением компонентов в активности. Обратите внимание, что перед методом findViewById() используется view, так как этот метод относится к компоненту, а не к активности, как мы обычно делали в программах, когда просто опускали имя активности. Т.е. в нашем случае мы ищем ссылку на кнопку не среди разметки активности, а внутри разметки самого фрагмента.
Нужно помнить, что в методе inflate() последний параметр должен иметь значение false в большинстве случаев.
FragmentManager
Класс FragmentManager имеет два метода, позволяющих найти фрагмент, который связан с активностью:
findFragmentById(int id) Находит фрагмент по идентификатору findFragmentByTag(String tag) Находит фрагмент по заданному тегу
Методы транзакции
Мы уже использовали некоторые методы класса FragmentTransaction. Познакомимся с ними поближе
add() Добавляет фрагмент к активности remove() Удаляет фрагмент из активности replace() Заменяет один фрагмент на другой hide() Прячет фрагмент (делает невидимым на экране) show() Выводит скрытый фрагмент на экран detach() (API 13) Отсоединяет фрагмент от графического интерфейса, но экземпляр класса сохраняется attach() (API 13) Присоединяет фрагмент, который был отсоединён методом detach()
Методы remove(), replace(), detach(), attach() не применимы к статичным фрагментам.
Перед началом транзакции нужно получить экземпляр FragmentTransaction через метод FragmentManager.beginTransaction(). Далее вызываются различные методы для управления фрагментами.
В конце любой транзакции, которая может состоять из цепочки вышеперечисленных методов, следует вызвать метод commit().
Аргументы фрагмента
Фрагменты должны сохранять свою модульность и не должны общаться друг с другом напрямую. Если один фрагмент хочет докопаться до другого, он должен сообщить об этом своему менеджеру активности, а он уже передаст просьбу другому фрагменту. И наоборот. Это сделано специально для того, чтобы было понятно, что менеджер тут главный и он не зря зарплату получает. Есть три основных способа общения фрагмента с активностью.
Фрагмент должен иметь только один пустой конструктор без аргументов. Но можно создать статический newInstance с аргументами через метод setArguments().
Доступ к аргументам можно получить в методе onCreate() фрагмента:
Динамически загружаем фрагмент в активность.
Вызываем метод в активности:
Если фрагмент должен сообщить о своих действиях активности, то следует реализовать интерфейс.
Управление стеком фрагментов
Фрагменты, как и активности, могут управляться кнопкой Back. Вы можете добавить несколько фрагментов, а потом через кнопку Back вернуться к первому фрагменту. Если в стеке не останется ни одного фрагмента, то следующее нажатие кнопки закроет активность.
Если вы вызовете метод addToBackStack() при удалении или замещении фрагмента, то будут вызваны методы фрагмента onPause(), onStop(), onDestroyView().
Когда пользователь нажимает на кнопку возврата, то вызываются методы фрагмента onCreateView(), onActivityCreated(), onStart() и onResume().
Рассмотрим пример реагирования на кнопку Back в фрагменте без использования стека. Активность имеет метод onBackPressed(), который реагирует на нажатие кнопки. Мы можем в этом методе сослаться на нужный фрагмент и вызвать метод фрагмента.
Теперь в классе фрагмента прописываем метод с нужным кодом.
Более желательным вариантом является использование интерфейсов. В некоторых примерах с фрагментами такой приём используется.
Интеграция Action Bar/Options Menu
Фрагменты могут добавлять свои элементы в панель действий или меню активности. Сначала вы должны вызвать метод Fragment.setHasOptionsMenu() в методе фрагмента onCreate(). Затем нужно задать настройки для методов фрагмента onCreateOptionsMenu() и onOptionsItemSelected(), а также при необходимости для методов onPrepareOptionsMenu(), onOptionsMenuClosed(), onDestroyOptionsMenu(). Работа методов фрагмента ничем не отличается от аналогичных методов для активности.
В активности, которая содержит фрагмент, данные методы автоматически сработают.
Если активность содержит собственные элементы панели действий или меню, то следует позаботиться, чтобы они не мешали вызовам методам фрагментов.
Код для активности:
Связь между фрагментом и активностью
Экземпляр фрагмента связан с активностью. Активность может вызывать методы фрагмента через ссылку на объект фрагмента. Доступ к фрагменту можно получить через методы findFragmentById() или findFragmentByTag().
Редактор кода
Рассмотрим возможности редактора кода при написании приложений.
Инъекция языка
Если вы скопируете текст в формате JSON и вставите его между кавычками, то экранирование произойдёт автоматически.
Сам текст не обязательно копировать из другого источника, можете создавать JSON-запись в самой студии. Снова нажимаем Alt + Enter и выбираем пункт Edit JSON Fragment. Появится новая панель, в котором вы можете набирать текст, а в редакторе кода будет выводиться валидный код для работы.
Аналогично можно работать с регулярным выражением.
Перемещаем метод вверх или вниз
Сворачиваем фрагменты кода
Студия умеет сворачивать фрагменты кода, которые являются структурной единицей, например, метод. Щёлкнув по фиговине (как это называется?), вы убираете код, чтобы не мозолил вам глаза.
Но мало кто знает, что свернуть можно любой свой код. Для этого ставим два слеша, как в комментариях, а затем добавляем слово region (без пробела) и через пробел название блока. Это будет началом блока. Конец блока обозначаем через //endregion
Теперь отмеченный блок можно сворачивать. Наведите порядок у себя в коде.
Редактор кода для XML в режиме Text
[I18N] Hardcoded string
Когда вы редактируете код разметки экрана активности, то можете встретить предупреждение [I18N] Hardcoded string «Какой-то ваш текст», should use @string resource.
Вам нужно заменить свой жёстко закодированный текст на строковый ресурс. Установите курсор внутри текста, нажмите комбинацию клавиш Alt+Enter и выберите пункт Extract string resource. Далее в диалоговом окне придумываете имя для ресурса и выбираете файл для хранения (обычно, strings.xml).
Предположим, вы заменили везде текст на строковые ресурсы и решили отредактировать текст у кнопки. Снова ставим курсор на нужном тексте и нажимаем комбинацию клавиш Ctrl+B, у вас сразу откроется файл strings.xml и не надо его искать в дереве проекта.
Вкладки
Каждый файл проекта открывается в собственной вкладке. Вкладки можно менять местами перетаскиванием с помощью мыши. Переключаться можно через клавиши Alt-стрелка влево и Alt-стрелка вправо. Также можно вызвать Switcher с помощью комбинации Ctrl+Tab.
Если будет открыто слишком много вкладок, то часть из них сгруппируется и будет доступна через выпадающий список по нажатию на треугольник.
Если имя файла на вкладке подчёркнуто красной волнистой линией, значит в коде содержится ошибка и не нужно запускать программы, то время потеряете. Сначала исправьте ошибку.
Вкладку можно «отстегнуть». Нажмите на вкладку и удерживая мышку, перетащите вкладку на рабочий стол. Также её можно вернуть обратно.
Каждая вкладка имеет контекстное меню и значок для закрытия. Изучите пункты меню самостоятельно. Например, можно разбить редактор кода на две части (по вертикали или горизонтали), чтобы видеть разные участки кода одновременно.
Строка состояния
В нижней части студии находится строка состояния. В нижнем правом углу имеется текстовая метка с информацией о текущем местоположении курсора в документе (номер строки:номер символа). Если подвести мышку к надписи, то можно увидеть всплывающую подсказку Click to go to line. Щелчок вызовет диалоговое окно для быстрого перехода на нужную позицию.
Рядом также имеется текстовая метка с указанием кодировки, в которой пишется код. В последних версиях студии это стало проблемой для русскоязычных программистов. Студия может использовать системную кодировку, которая часто бывает windows-1551, но в Android принято использовать UTF-8, и после запуска приложения вместо текста можно увидеть кракозябры.
Остальные элементы не представляют интереса.
Информационный желоб
Слева от редактора кода имеется отдельная полоска, которую я назвал информационным желобом. На ней можно увидеть различные значки. Например, у класса MainActivity выводится значок, связанный XML-разметкой для данного класса. Нажав на него, вы можете быстро открыть нужный XML-файл.
Также выводятся значки для методов. Каждый тип методов имеет свой цвет.
В данном желобе устанавливаются точки останова (breakpoint).
Доступно контекстное меню. Например, можно выбрать показ номеров строки.
На границе желоба и редактора кода имеются маркеры для сворачивания блоков кода.
Если нажать клавишу F11, то текущая строка будет помечена как закладка и появится галочка.
Анализ кода
Справа от редактора кода находится анализатор кода. Если код содержит ошибки, сверху будет гореть красный прямоугольник. Если ошибок нет, но есть предупреждения, то будет гореть жёлтый прямоугольник. При правильном коде горит зелёный прямоугольник.
В случае ошибок или предупреждений также выводятся зарубки. Если подвести к ним курсор мыши, то можно прочитать сообщение или сразу перейти в нужную строку для исправления, нажав на неё. Также есть синие зарубки для выделенных слов и задач TODO.
Автодополнение кода
Студия поддерживает автодополнение кода, когда по первым символам подставляет нужные слова. Распространяться на эту тему не буду.
Основная комбинация Ctrl+Space.
Если написать имя метода, например, «private void onClick()» и нажать комбинацию Ctrl+Shift+Enter, то студия сгенерирует фигурные скобки.
Когда у вас есть кусок кода и вы начинаете исправлять его, то возникает следующая ситуация. Студия предлагает подсказку, вы соглашаетесь и нажимаете Enter.
В данном случае мы хотим заменить переменную name на catName, но если нажмём на Enter, то подсказка присоединится к старому коду и мы получим catNamename. В следующий раз нажимайте на клавишу Tab и тогда старый вариант заменится на новый.
Также изучите другие клавиатурные комбинации.
Периодически используйте команды меню Code: Reformat Code и Rearrange Code. Первая команда полезна для Java-кода, а вторая для XML-разметки. Код станет аккуратнее.
Перевод на новую строку
Если курсор находится в середине выражения и вы хотите начать новую строку, не обязательно гнать курсор в конец строки. Просто нажмите комбинацию Shift+Enter.
Использование отладчика Android Studio по максимуму
Это хитрость, о которой я узнал совсем недавно у Senior Android разработчика в моей компании, и теперь я чувствую себя несчастным, сожалея о времени, которое я провел в ожидании сборки Gradle, чтобы проверить свои изменения при написании Android приложений.
Вот типичный сценарий, который каждый Android разработчик мог бы встретить, по крайней мере, один раз в течение своего жизненного цикла разработки. У вас есть список элементов, которые вы хотите показать в ListView или RecyclerView.
Теперь, допустим, вы захотели изменить цвет текста для каждого третьего элемента в списке. Таким образом, код будет выглядеть примерно так:
Затем вы нажмёте Run и дождётесь завершения сборки и увидите ваши изменения, так?
Теперь вы бы подумали, существует ли другой путь для достижения этой же цели?
Твой выход, Android Studio! Да, нам не нужен внешний плагин или инструмент для достижения вышеупомянутой задачи и более того, нам даже не придется заново собирать проект. Вы не ослышались, мы обойдёмся без Gradle 🙂 Вот как!
Шаг 1 — Необходимо определить конфигурацию запуска
Такая конфигурация запуска позволит нам запускать наше приложение и присоединять к нему отладчик из Android Studio, а также вы сможете присоединить его к уже запущенному процессу.
Нажмите Run → Edit Configurations.
Edit Configurations» data-src=»https://habrastorage.org/getpro/habr/post_images/925/25e/e1a/92525ee1a0fa26e7cca96d237563c9fa.png»/>
В верхнем левом углу диалогового окна щелкните значок «+» и выберите Android App.
Теперь дайте ему имя, мне нравится называть его Run-Only, но вы можете называть его как угодно.
Выберите модуль, который содержит код вашего приложения, в приведенном ниже скриншоте он называется app.
Важный шаг:
В разделе Installation Options выберите Nothing;
В Launch Options выберите Default Activity;
В разделе Before Launch удалите Gradle-aware Make.
Таким образом, конфигурация должна выглядеть следующим образом:
Теперь вы можете применить и сохранить эту конфигурацию. Сейчас она должна быть выбрана автоматически. Если нет, то просто выберите её из списка.
Теперь поставьте breakpoint поближе к строке, которую вы хотите проверить. В нашем случае мы разместим ее там, где мы устанавливаем текст.
Щелкните правой кнопкой мыши на breakpoint и снимите флажок Suspend (рус. приостановить).
Как только вы снимете флажок, диалог расширится и покажет больше опций.
Нам интересен раздел Evaluate and log. Мы напишем там выражение, чтобы проверить изменения в нашем элементе RecyclerView. Нажмите на маленький значок голубого цвета справа от окна ввода Evaluate and log, чтобы развернуть его до более крупного редактора, и добавьте выражение для тестирования, и нажмите Ok, а затем Done.
Теперь нажмите на иконку Debug с выбранной конфигурацией Run-Only и посмотрите на эту магию.
Приложение должно запуститься с вашей Activity по умолчанию, и вы должны увидеть внесенные там изменения. Также, если вы уделяете пристальное внимание IDE, в самом низу вы увидите только одну запускаемую задачу: Launching Activity.
Хотелось бы услышать ваши впечатления, когда вы опробуете эту хитрость!