Шаблоны файлов Android Studio

Зачем нужны шаблоны файлов Android Studio

Android Studio имеет в арсенале функции создания шаблонов, которую я довольно часто использую, чтобы ускорить процесс разработки. Каждый маломальский разработчик использует шаблоны, не понимая, что может сделать с ней гораздо больше. Когда мы использовали шаблоны файлов, — это когда мы щелкаем правой кнопкой мыши на пакет в Android Studio, чтобы создать файл ClassActivity, 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 менять переменные.

Поделись с друзьями:
Если вам понравилась статья, подписывайтесь на наши социальные сети.

Оставьте комментарий

1 × четыре =