Как отформатировать код в андроид студио
Перейти к содержимому

Как отформатировать код в андроид студио

  • автор:

Как выровнять/форматировать код в Android Studio?

Есть ли способ/сокращенная/встроенная функция, которая может выравнивать код для операндов, например, знаки ‘=’?

Например, есть XAlign для Xcode (https://github.com/qfish/XAlign), позволяющая пользователю выбрать код, который нужно выровнять, и использовать сочетание клавиш для автоматического выравнивания.

В Android Studio есть функция Fields Group, которая может «выровнять по столбцам», но она не работает для уже написанного кода.

Поделиться Источник 29 января 2015 в 19:41

6 ответов

Код отступов в Android Studio:

Windows

Mac:

Поделиться 16 декабря 2015 в 16:00

В Eclipse, который поставляется с Android Studio Bundle, сочетание клавиш выглядит следующим образом, чтобы инициировать Auto Formatter:

Если вы хотите изменить эту комбинацию, перейдите в меню НастройкиKeymap и установите настраиваемое значение.

Поделиться 29 января 2015 в 19:45

Выравнивание для объявлений переменных работает только для тех, которые находятся вне функций. Функция выравнивания в меню НастройкаСтиль кодаОборачивание и скобкиГруппы полей«Выравнивание в столбцах» не работает для тех, которые находятся внутри скобок/скобок.

Эта функция доступна, но еще не в стабильном выпуске. Она доступна из сборки: 140.1761

На момент написания этого ответа моя текущая сборка — «135.1653844, построенная 18 декабря 2014 года» в стабильном выпуске.

Поделиться 29 января 2015 в 21:52

Ctrl + Shift + Alt + L

⌥ option + ⌘ command + L

Поделиться 04 декабря 2018 в 07:25

Для Windows и Linux в Android Studio:

Для Mac:

Поделиться 22 марта 2017 в 12:22

Ubuntu Linux: Ctrl-alt-L (предложенный другими ответами) захватывается менеджером окна и блокирует экран. Поэтому вам нужно изменить его: файл->настройки->keymap->главное меню->код->Переформатировать код. Я использую двойную вкладку, так как не хочу, чтобы вкладка меняла выделение правильно.

Это форматирует код так, как вы указали в ваших предпочтениях. Чтобы обработать ваш конкретный запрос (выравнивание выравнивания) перейдите в: (файл->настройки->редактор->стиль кода->(выберите язык)->обертка и скобки->объявления групп->выравнивание переменных в столбцах

Эти стили являются языковыми, поэтому этот конкретный вариант может не существовать на выбранном вами языке или может быть назван по-другому.

Как выровнять / отформатировать код в Android Studio?

Есть ли способ/ярлык/встроенная функция, которая может выровнять код для операндов, таких как знаки ‘=’? Например, существует XAlign for Xcode (https://github.com/qfish/XAlign), позволяющий пользователю выбрать код, который необходимо выровнять, и использовать ярлык для его автоматического выравнивания. В Android Studio есть функция группы полей, которая может «выравнивать по столбцам», но она не работает для уже написанного кода.

Daksharma 29 янв. 2015, в 21:25
Поделиться
Jared Burrows 29 янв. 2015, в 19:45
Я не думаю, что есть встроенный форматер для выравнивания по = в IntelliJ.
nmr 29 янв. 2015, в 20:18
Поделиться:
android-studio
code-readability
code-formatting

5 ответов

Код отступа в Android Studio:

Windows

Mac:

Elenasys 16 дек. 2015, в 17:51
Поделиться
Это меняет ориентацию экрана на моем ноутбуке. Очень надоедливый.
Tequilaman 25 дек. 2016, в 02:16
@Tequilaman Tequilaman, может быть, отключить горячие клавиши в настройках видеокарты?
CoolMind 04 апр. 2017, в 09:50
@CoolMind, спасибо за предложение, но у меня больше нет этого ноутбука. Я сейчас на MacBook.
Tequilaman 17 апр. 2017, в 03:31
@Tequilaman Текиламан, счастливого кодирования 🙂
CoolMind 17 апр. 2017, в 13:26

Хорошо работает на уровне файлов, но мне интересно, есть ли способ сделать изменение для всего проекта или даже лучше сделать это автоматически, когда я открываю проект? Upvoted

pixel 10 сен. 2017, в 19:49
Показать ещё 3 комментария

В Eclipse, который поставляется с Android Studio Bundle, комбинация клавиш для запуска Auto Formatter выглядит следующим образом:

Если вы хотите изменить эту комбинацию, перейдите в меню «Настройки» → «Таблица ключей» и выберите «Пользовательский».

Syed Atir Mohiuddin 29 янв. 2015, в 20:05
Поделиться
CTRL + ALT + L!
localhost 29 янв. 2015, в 19:46
Исправьте свой пост. Ваш ответ неверный.
Jared Burrows 29 янв. 2015, в 19:51
Исправлено сейчас
Syed Atir Mohiuddin 29 янв. 2015, в 19:56

Я на Mac. [Command + Option / Alt + L] не работает. у меня включена группа полей «Выровнять по столбцу». но выбор кода и переформатирование не похоже на работу.

Daksharma 29 янв. 2015, в 20:10
Вы пробовали переопределить ключи в настройках?
Syed Atir Mohiuddin 29 янв. 2015, в 20:12

Да. Keymap по умолчанию. использование ярлыка вызывает код переформатирования, но он не переформатирует код. знак = не выравнивает объявления переменных для выбранного кода.

Daksharma 29 янв. 2015, в 20:17
я думаю, что это CTRL + SHIFT + F
Neo 01 фев. 2016, в 11:29
Показать ещё 5 комментариев

Выравнивание для объявлений переменных работает только для тех, которые находятся за пределами функций. Функция выравнивания в меню «Предпочтения» → «Стиль кода» → «Обтекание и фигурные скобки» → «Группы полей» → «Выровнять по столбцам» не работает для тех, кто находится внутри скобок/фигурных скобок.

Эта функция доступна, но еще не в стабильной версии. Доступен в сборке: 140.1761

На момент написания этого ответа моя текущая сборка «Стабильная версия» была 135.1653844, построена 18 декабря 2014 года.

Форматирование разметки в AndroidStudio 3.5

Обновил AndroidStudio до версии 3.5 и столкнулся с такой проблемой, при форматировании текста в разметке (Ctrl+Alt+L), IDE перемещает layout, в ранних версиях таких проблем не наблюдалось. Можно отключить данную функцию, сняв галку: Rerrange Code. Но тогда IDE перестаёт форматировать текст внутри View. Может кто знает как отключить перемещение полей при форматировании кода? UPD: По прозьбе коллег на данном ресурсе, уточнение: у нас есть разметка, например корневым будет ConstraintLayout , Кладём в него несколько вьюшек, Layout-ов и что я заметил любит особенно путешевствовать include . Include кладём гдето в начале файла, ничего не выделяем, дальше жмакаем Ctrl+Alt+L , если ничего не заметили нажимаем Ctrl+Alt+Shift+L и в диалоговом окне проверяем включён ли Rerrange Code , включаем, повторяем предыдущее действие. Итог, елементы принимаю определённый порядок, что нарушает их отображение задуманное разработчиком. Отлично можно наблюдать если у вас есть такой файл отформатированный в прошлой версии AS и закомичен. Если бы не VCS я бы не сразу понял что произошло.

  • android-studio
  • intellij-idea

Отслеживать
5,084 1 1 золотой знак 5 5 серебряных знаков 24 24 бронзовых знака
задан 17 сен 2019 в 13:20
1,197 9 9 серебряных знаков 19 19 бронзовых знаков

у меня такая же проблема, единственное решение проблемы — ждать патч)) а пока терпеть и не причесывать код этой комбинацией

17 сен 2019 в 18:23

@AndrewGoroshko, то есть вы тоже считаете что это бага, а не фича? Подумываю обновиться до Canary версии

17 сен 2019 в 18:48
@Valeriy а можно носом ткнуть, а то я не понял что именно не так форматируется ?
17 сен 2019 в 20:22
@keekkenen, обновил
18 сен 2019 в 6:09

я думаю что это на текущий момент баг в фиче)) раньше до обновления ведь все работало как нужно? у меня во всяком случае все работало корректно)

18 сен 2019 в 6:09

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Тоже столкнулся с такой проблемой. В настройка -> Code Styles -> XML в шаблонах помимо Default появился Default copy, выбрав который проблему решил. Доступные для настройки в графическом интерфейсе настройки у них особо не отличаются, но если экспортировать файлы отличаются капитально. Не дошли пока руки разобраться что к чему. Посмотрите, если ли у вас такой стиль, ибо не уверен появился он сам или я его создал. Еще рекомендуют в комментах сделать следующее:

Там же, на вкладке Android (возможно переход на вкладкуне обязателен), справа есть текск синего цвета (Set from. ), жмакаем -> Predefined Style -> Android. Apply.

Вполне верю, что может помочь. Если нет, попробуйте мой конфиг(Это экспорт настроек стиля XML кода. Сохранить как .xml и импортировать на соответствующей вкладке настроек):

                                                
true
true true true true
true true true true
true true true true
true true true true
true true true
true true true
true true true
true true true
true true
true true
true true true
true true true
true true true
true true true
true true
true true
true true
true true
true
true
true
true true
true
true
true true
true
xmlns:android ^$
xmlns:.* ^$ BY_NAME
.*:id http://schemas.android.com/apk/res/android
.*:name http://schemas.android.com/apk/res/android
name ^$
style ^$
.* ^$ BY_NAME
.* http://schemas.android.com/apk/res/android ANDROID_ATTRIBUTE_ORDER
.* .* BY_NAME

Автоматический Code Improvement при коммите в Android Studio

Работать с гитом в Android Studio, как известно, можно двумя способами.

Первый способ классический — использовать консоль. Плюсом такого подхода являются в первую очередь надежность. GUI может залагать и например, зависнуть на этапе rebase так, что abort/continue/переключение на другую ветку не поможет. Консольные команды вам в помощь, они всегда безотказны.

Второй способ — использовать GUI, предоставляемый Android Studio. Плюсы очевидны — меньший порог входа, более понятно, что вообще можно делать. А также есть различные плюшки от самой студии для удобства работы с гитом. Об одном из них и пойдет речь. Кстати, используя GUI, тоже можно оставлять в покое мышку и использовать hotkey

Используемые Hotkey в статье

Shift+Shift (двойное нажатие shift) — Окно поиска. Позволяет искать как код/ресурсы, так и различные действия и настройки.

Ctrl+Alt+L (⌘+⌥+L) → Форматирование кода

Shift+Ctrl+Alt+L (⇧+⌘+⌥+L) → Форматирование кода → Форматирование кода с параметрами.

вызывает данное окно

image

О чем вообще речь и где найти?

Неактуальные импорты, пустые строки, пробелы вместо табов — эти вещи бесят, если они попадают в готовый код, предназначенный для pull request. Исправить это легко, используя hotkey Ctrl+Alt+L, однако часто мы забываем это делать.
Idea/AndroidStudio позволяет проводить эти действия автоматически, в последний момент перед коммитом

При использовании commit’а через Android Studio можно увидеть такого вида окно:

Нас интересуют галочки, которые находятся справа от списка файлов, в блоке Before Commit. При активации этих помощников, они будут автоматически применяться при каждом коммите

Чем именно мне помогут эти галочки?

✓ Reformat code

Данное улучшение приводит код в соответствии с вашим code style. Действие полностью аналогично ctrl+shift+alt+L с включенным clean up.

Настроить code style можно здесь Settings → Editor → Code Style

Tab and Indents

Применяет отступы строк в соответствии с code style (Подробно в Code Style, в одноименном разделе)

В примере пробелы, используемые для формирования отступа (отмечены точками), будут замены табами (отмечены стрелкой)

class CleanTab(context: Context)
class CleanTab(context: Context) < ->val date = Date() -> val button = Button(context) -> val textView = TextView(context) -> val ratingBar = RatingBar(context) -> val imageView = ImageView(context) >

Spaces

Форматирует все пробелы в коде в соответствии с code-style.

Будут удалены лишние пробелы в конструкторе Date, добавлены пробелы между объявлением переменной button и =, а также между списком аргументов args в main и

class CleanSpaces(context:Context) < val date = Date( ) val button= Button(context) fun main(arg: Args)< >>
class CleanSpaces(context: Context) < val date = Date() val button = Button(context) fun main(arg: Args) < >>

Wrapping and Braces

Этот блок управляет переносом строк. Переносятся как сами строки кода, так и закрывающие/открывающие скобки.

Строчка else, а также строчка catch должны располагаться на той же линии, что и закрывающая скобка (так настроено в code style)
Общее количество символов на строке с функцией manyArguments вышло за 80 знаков(настроено в code style), поэтому аргументы будут перенесены на новую строку

class CleanWrappingAndBraces < fun condition() < if (liveData != null) < > else < > > fun catching() < try < > catch (e: Exception) < > > fun manyArguments(userId: Int, issuerCountryId: String, sendingCountryId: String, receivingCountryId: String) < >>
class CleanWrappingAndBraces < fun condition() < if (liveData != null) < > else < > > fun catching() < try < > catch (e: Exception) < > > fun manyArguments(userId: Int, issuerCountryId: String, sendingCountryId: String, receivingCountryId: String)

Blank Lines

Регулирует максимальное и минимальное количество пустых строчек в коде. (Подробно в Code Style, в одноименном разделе)

В данном примере удалит лишние строки от последней функции до >, а также 2 лишних пустых строчки между функциями

class CleanBlank < fun foo() < >fun bar() < >>
class CleanBlank < fun foo() < >fun bar() < >>

Rearrange code

Располагает атрибуты и элементы в том порядке, который соответствует код-стайлу. Работает в XML и HTML файлах. Настроить расположение можно в Setting → Editor → CodeStyle → XML/HTML → Arrangement

Внимание! неправильная настройка может привести к печальным последствиям. Rearrange может влиять на очередность элементов, что может привести к неправильной работе в файлах, чувствительных к расположению. Пример: в LinearLayout, при сортировке по алфавитному порядку, элемент Button может переместится выше TextView, хотя по дизайну такого быть не должно. Выход — настраивать расположение ТОЛЬКО атрибутов

Сортировка

В данном примере xmlns расположились в трех первых строчках и строго по порядку, определенному в code-style(xmlns:android на первой строчке, остальные xmlns: <. >в алфавитном порядке.
Обратите внимание, xmlns:tools и xmlns:app не были удалены даже несмотря на то, что нет случаев их использования. Это говорит о том, что rearrange влияет только на расположение элементов

Сортировка

В данном примере блок с атрибутами android:padding изменит порядок в соответствии с code-style. Также атрибут style расположится сразу за android:id

Optimize import

Следит за чистотой блока импортов и приводит в правильный вид, а также проверяет на соответствие code style. Само действие полностью аналогично ctrl+shift+alt+L с включенным optimize import.

Удаление неиспользуемых импортов

В данном примере при optimize imports import java.util.* будет удален, так как нет полей или методов, нуждающихся в нем

import android.content.Context import android.widget.Button import java.util.* class RemoveUnused(context: Context)
import android.content.Context import android.widget.Button class RemoveUnused(context: Context)

Объединение импортов

Если n или более классов импортируются из одного пакета, то такой импорт будет заменен импортом всего пакета.
Если m или более enum или java static импортируется из одного класса, то такой импорт будет заменен на импорт всего класса

Оба параметра задаются в Settings → Editor → Code Style → Kotlin → Imports

В данном примере множественные импорты из пакета android.widget будут заменены на android.widget.*

import android.content.Context import android.widget.Button import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView import android.widget.RatingBar import java.util.* class MergeImport(context: Context) < >
import android.content.Context import android.widget.* import java.util.* class MergeImport(context: Context) < >

В том случае, если стоит настройка не объединять импорты(m = 0, n=0), объединенные импорты(импорт пакета) будут заменены импортом каждого класса/функции/поля отдельно.
В случае ниже import android.widget. и import java.util. будут упразднены

import android.content.Context import android.widget.* import java.util.* class MergeImport(context: Context)
import android.content.Context import android.widget.Button import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView import android.widget.RatingBar import java.util.* class MergeImport(context: Context) < >

Расположение по алфавиту

После применения, все импорты отсортируются, и будут удобно располагаться в алфавитном порядке

import android.content.Context import android.widget.Button import android.widget.ImageView import android.widget.TextView import java.util.* import android.widget.RatingBar class SortImport(context: Context) < >
import android.content.Context import android.widget.Button import android.widget.ImageView import android.widget.RatingBar import android.widget.TextView import java.util.* class SortImport(context: Context) < >

Perform code analysis

Помогает находить проблемные места. Носит информационный характер и никак не меняет код. Самые частые случаи — неиспользуемые параметры, переменные, использование кода, помеченного как Deprecated

Пример кода с множествеными нарушениями

fun TextView.format(message: String)

Перед коммитом студия подскажет, что есть проблемы с кодом и предложит их посмотреть внимательнее:

При нажатии на Review покажется список найденных предупреждений:

Check TODO

Очень полезная галочка, помогает не забыть о новых TODO, которые были поставлены именно в этом коммите. Более того, студия позволяет отслеживать не только //TODO, но и //FIXME, а также любые собственные todo, которые были добавлены через Setting → Editor → TODO.

Также можно фильтровать список todo, которые студия будет проверять.

Так выглядит подсказка студии, что был добавлен todo. При нажатии на review он покажет список всех новых todo и предложит их пересмотреть

Clean up

Очень помогает держать код в чистоте. Удаляет избыточный код (см. примеры), заменяет deprecated функции. Действие полностью аналогично Actions → Code cleanup. Достаточно интересная функция, но вместе с этим может быть и опасной.

Из замеченных особенностей можно выделить две основные:

  • замена deprecated методов (подробнее ниже)
  • непонятную замену вызова методов view в презентере в одном из личных случаев

! Обязательно пересматривайте получившийся коммит, если используете данную функцию!

Redutant code

После применения удалятся элвис-операторы, т.к. были применены к non-nullable переменным

data class User(val firstName: String, val secondName: String) val user = User("Василий", "Пупкин") fun getUserFullName(): String
data class User(val firstName: String, val secondName: String) val user = User("Василий", "Пупкин") fun getUserFullName(): String

После применения удалится оператор public, т.к. конкретно в этом случае лишний

data class User(val firstName: String, val secondName: String) val user = User("Василий", "Пупкин") public fun getUserFullName(): String
data class User(val firstName: String, val secondName: String) val user = User("Василий", "Пупкин") fun getUserFullName(): String

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

class ExecutionClass(val exec: () -> Unit) val exec = ExecutionClass()
class ExecutionClass(val exec: () -> Unit) val exec = ExecutionClass

Deprecated код

Если в аннотации deprecated указан ReplaceWith(), то при cleanup старые методы и классы будут заменены в соответствии с этой пометкой. Надо быть очень внимательным с применением этой возможности, так как работает все очень банально — название старого метода меняется ровно на то, что было указано в ReplaceWith(). Анализатор не проверят даже существует ли такой код. Поэтому неправильно указание нового класса/метода может привести к невозможности компиляции кода. И даже если такая функция/класс существует, даже если у нее одинаковая сигнатура(что анализатор также НЕ проверяет), то это может привести к другой проблеме, необходимо было не просто заменить одну функцию на другую, но и изменить сценарий использования. Код в таком случае скомпилируется, но не будет правильно работать

Заменит старый метод и класс на новые

@Deprecated("Будет удален", ReplaceWith("newMethod()")) fun oldMethod() = Unit fun newMethod() = Unit @Deprecated("Будет удален", ReplaceWith("NewClass")) class OldClass class NewClass class GetDeprecatedCodeUseCase(val clazz: OldClass) < init < val initData = oldMethod() >>
@Deprecated("Будет удален", ReplaceWith("newMethod()")) fun oldMethod() = Unit fun newMethod() = Unit @Deprecated("Будет удален", ReplaceWith("NewClass")) class OldClass class NewClass class GetDeprecatedCodeUseCase(val clazz: NewClass) < init < val initData = newMethod() >>

Выводы и рекомендация

Помощники, предоставленные Android Studio могут здорово облегчить жизнь вам и вашим коллегам. Да, все действия можно провести и вручную перед отправкой на коммит, но все же не имея привычки так делать, легко пропустить неправильной код дальше. Правильное использование может освободить вас от мыслей о том, что надо следить за каждой запятой и каждым пробелом.

Из приведенных выше примеров можно понять несколько моментов:

Optimize import и Reformat code можно использовать безбоязненно. Они влияют только на форматирование и явные огрехи.

Rearrange и Clean up необходимо использовать аккуратно. Да, они в целом могут хорошо помочь и выловить уже что-то посерьезнее, но при неправильной настройке (Rearrange) или неоднозначном коде (Clean up) помощники могут сильно ошибиться

Check TODO и Perform code analysis также можно использовать безбоязненно. Они никаким образом не влияют на код, только дают назойливые подсказки. Да, если у вас в проекте все полностью построено на TODO и Deprecated коде, то отбоя от них не будет, и они больше будут мозолить глаза. Но если у вас в проекте достаточно чистый код и такие моменты стараетесь минимизировать, то помощники будут давать отличный шанс пересмотреть код, где вы могли допустить упущение.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *