Содержание
Зачем нужны шаблоны файлов Android Studio
Android Studio имеет в арсенале функции создания шаблонов, которую я довольно часто использую, чтобы ускорить процесс разработки. Каждый маломальский разработчик использует шаблоны, не понимая, что может сделать с ней гораздо больше. Когда мы использовали шаблоны файлов, — это когда мы щелкаем правой кнопкой мыши на пакет в Android Studio, чтобы создать файл Class
, Activity
, Fragment или Interface
. Android Studio позволяет нам изменять эти шаблоны файлов и даже создавать собственные. Каждый раз, когда мы создаем новый interface
или class
из контекстного меню, мы используем соответствующие файлы шаблонов. Вот пример:
Как открыть окно шаблонов
Для того, чтобы открыть окно шаблонов нужно пройти:
File -> Settings -> (Editor -> File and Code Templates)
Создадим новый шаблон
Чтобы создать собственный настраиваемый шаблон, в окне File and Code Templates, нажмите значок «+» в верхнем левом углу (выше помечено как Добавить). Далее следует ввести название файла и его расширение (kt для Kotlin и java для Java).
Как написать шаблон
Шаблон это не просто копия кода, в него можно встраивать переменные, которые впоследствии заполняются при использовании шаблона. Ниже вы все увидите.
Давайте создадим шаблон MyAdapter – это адаптер для RecyclerView.
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME} #end import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import ${PACKAGE_NAME}.databinding.LayoutUserListBinding class ${NAME} : RecyclerView.Adapter<MyViewHolder>() { var ${USER_LIST} = mutableListOf<${USER_CLASS}>() var clickListener: ListClickListener<${USER_CLASS}>? = null fun set${USERS}(${USERS}: List<${USER_CLASS}>) { this.${USER_LIST} = ${USERS}.toMutableList() notifyDataSetChanged() } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.${LAYOUT_USER}, parent, false) return MyViewHolder(view) } override fun getItemCount(): Int { return ${USER_LIST}.size } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val ${_USER} = ${USER_LIST}[position] holder.binding.run { textLocation.text = ${_USER}.location layout.setOnClickListener { clickListener?.onClick(${_USER}, position) } imgDelete.setOnClickListener { clickListener?.onDelete(${_USER}) } } } fun setOnItemClick(listClickListener: ListClickListener<${USER_CLASS}>) { this.clickListener = listClickListener } } class MyViewHolder(view: View): RecyclerView.ViewHolder(view) { val binding = LayoutUserListBinding.bind(view) } interface ListClickListener<T> { fun onClick(data: T, position: Int) fun onDelete(${USER}: T) }
Разберём особенности шаблона
В качестве языка шаблонов используется Apache Velocity. При работе с шаблонами файлов в Android Studio существует ряд полезных предопределенных переменных, которые мы можем использовать для упрощения создания или редактирования содержимого шаблона.
Вот некоторые из этих предопределенных:
${DATE}
– возвращает текущую системную дату${TIME}
– возвращает текущее системное время${NAME}
– определяет имя нового файла (класс, интерфейс, перечисление и т. д.)${PACKAGE_NAME}
– возвращает имя целевого пакета, в котором создается новый файл класса или интерфейса${PROJECT_NAME}
– возвращает имя текущего проекта${USER}
– возвращает логин текущего пользователя.
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME} #end
- Первое, на что мы обращаем внимание, это то, как имя пакета представлено в шаблоне. Это пример того, как мы используем упомянутую ранее
${PACKAGE_NAME}
переменную . #if #end
блок, который обеспечивает существование имени пакета перед его объявлением. Это необходимо, чтобы при создании класса в корневой папке проекта механизм шаблонов пропустил установку имени пакета.${NAME}
переменная, которую мы также упоминали ранее как переменную, которая используется для определения имени класса.#parse
– этот элемент скрипта просто позволяет нам импортировать переменную или файл, содержащий шаблон. Думайте об этом как о «суперклассе», любые шаблоны, которые существуют в указанном файле (File Header.java
), будут применяться в файле шаблона, который на него ссылается.
class ${NAME} : RecyclerView.Adapter<MyViewHolder>() { ...
${NAME} – тут подставляется название класса
var ${USER_LIST} = mutableListOf<${USER_CLASS}>()
${USER_LIST} – это собственная переменная для названия коллекции List
${USER_CLASS} – это название data class (модели данных)
Как использовать шаблон Android Studio
Для вставки шаблона, щелкните правой клавишей по пакету в который нужно добавить шаблон и выберите New -> MyAdapter (у вас будет ваш шаблон)
Теперь шаблон просит заполнить все переменные, которые присутствуют в шаблоне и нажимаем OK.
Заключение
На этом всё, наш шаблон вставлен и заполнен новыми именами переменных. Использовать шаблонов гораздо удобнее и быстрее, чем копировать файлы и затем методом Refactor менять переменные.