Hallo teman”, selamat datang di Part ketiga tentang Activity tamplates 😀
Ini adalah part terakhir terkait Template di Android Studio. Meskipun di judul tertulis Activity Templates, tapi kita bisa melakukan lebih dari hal itu. Dengan satu template kita bisa membuat beberapa file secara otomatis. Berikut contohnya:
Jika kamu belum membaca part sebelumnya, kamu bisa mengunjungi link berikut ini
- Part 1: https://www.yukngoding.id/2020/04/16/buat-ngoding-lebih-cepat-di-android-studio-dengan-templates-part-1-live-templates/
- Part 2: https://www.yukngoding.id/2020/04/19/buat-ngoding-lebih-cepat-di-android-studio-dengan-templates-part-2-file-and-code-templates/
Kembali ke topik postingan. Bagaimana cara agar kita dapat membuat Activity Template? Langsung saja, Yuk Ngoding 😀
1. Open Folder
Untuk pengguna Windows:
{ANDROID_STUDIO_LOCATION}/plugins/android/lib/templates/
Untuk pengguna macOS:
/Applications/Android Studio.app/Contents/plugins/android/lib/templates/

2. Membuat folder dan file – file baru
Sesuai dengan judul, pada postingan ini kita akan membuat template untuk Activity. Lebih spesifiknya kita akan membuat Activity dengan MVP pattern. Oleh karena itu kita akan membuat folder baru di activities. Disini kita membuat folder dengan nama YnMVP.

Kita juga telah membuat beberapa file baru, mari kita bahas satu-satu
3. template.xml
Ini adalah file yang akan berfungsi untuk menerima inputan dari user. Berikut adalah screenshot dari template.xml yang akan kita buat.

Silahkan copy code berikut ini:
<?xml version="1.0"?>
<template
format="5"
revision="1"
name="MVP Activity"
description="Creates a new activity with MVP Pattern">
<category value="Activity" />
<formfactor value="Mobile" />
<parameter
id="mvpClass"
name="MVP Name"
type="string"
constraints="class|unique|nonempty"
default="mvp"
help="The name of the MVP class to create" />
<parameter
id="layoutName"
name="Layout Name"
type="string"
constraints="layout|unique|nonempty"
suggest="${activityToLayout(mvpClass)}"
default="activity_main"
help="The name of the layout to create for the activity" />
<parameter
id="isLauncher"
name="Launcher Activity"
type="boolean"
default="false"
help="If true, this activity will have a CATEGORY_LAUNCHER intent filter, making it visible in the launcher" />
<parameter
id="packageName"
name="Package name"
type="string"
constraints="package"
default="com.mycompany.myapp" />
<!-- 128x128 thumbnails relative to template.xml -->
<thumbs>
<!-- default thumbnail is required -->
<thumb>template_blank_activity.png</thumb>
</thumbs>
<globals file="globals.xml.ftl" />
<execute file="recipe.xml.ftl" />
</template>
<template>
- name: Nama dari template. Nama ini akan muncul pada list template
- description: Penjelasan ini akan muncul pada bagian atas form (Lihat screenshot).
<category>
- Karena kita akan membuat template untuk activity, maka kita mengatur value dengan nilai “Activity”
<formfactor>
- Kita membuat template untuk android, oleh karena itu kita mengatur nilai value dengan “Mobile”. Isi value sesuai dengan jenis template yang akan kita buat.
<parameter>
- id: Sebagai tanda pengenal dari parameter. Untuk mengakses nilai inputan dari user, kita bisa mengakses melalui id.
- name: Nama dari parameter. Name ini akan muncul pada sisi kiri form inputan
- type: Jenis inputan yang diinginkan dari form
- constraints: Kriteria tambahan yang digunakan untuk form
- default: Isi dari form ketika pertama kali muncul. Seperti halnya MainActivity yang muncul pada form ketika membuat activity untuk pertama kali
- help: Penjelasan tambahan yang akan muncul pada sisi bawah ketika sedang mengisi form
- suggest: Saran yang akan dimunculkan pada user. Ini seperti ketika kita mengubah nama activity, nama layout juga ikut berganti secara otomatis pada template.
<thumb>
- Image yang akan muncul ketika memilih template
4. globals.xml.ftl
Pada bagian ini kita mendeklarasikan id tambahan yang akan digunakan di setiap code template kita lainnya.
<?xml version="1.0"?>
<globals>
<global id="hasNoActionBar" type="boolean" value="false" />
<global id="simpleLayoutName" value="${layoutName}" />
<global id="activityClass" value="${mvpClass}Activity" />
<global id="excludeMenu" type="boolean" value="true" />
<global id="generateActivityTitle" type="boolean" value="false" />
<#include "../common/common_globals.xml.ftl" />
</globals>
- ${layoutName} dan ${mvpClass} adalah id yang berasal template.xml. Id tersebut disimpan nilainya ke id default (seperti: simpleLayoutName) yang akan dipergunakan dalam membuat template.
- Di file ini dan beberapa file berikutnya terdapat beberapa code include untuk default template activity. Id default (seperti: hasNoActionBar) tersebut akan digunakan di beberapa file yang diinclude tersebut.
5. recipe.xml.ftl
Code pada file ini dipergunakan untuk membuat file-file template kita nantinya.
<?xml version="1.0"?>
<#import "root://activities/common/kotlin_macros.ftl" as kt>
<recipe>
<#include "../common/recipe_manifest.xml.ftl" />
<@kt.addAllKotlinDependencies />
<#include "../common/recipe_simple.xml.ftl" />
<open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
<instantiate from="root/src/app_package/ViewClass.kt.ftl"
to="${escapeXmlAttribute(srcOut)}/${mvpClass}Activity.kt" />
<instantiate from="root/src/app_package/ContractClass.kt.ftl"
to="${escapeXmlAttribute(srcOut)}/${mvpClass}Contract.kt" />
<instantiate from="root/src/app_package/PresenterClass.kt.ftl"
to="${escapeXmlAttribute(srcOut)}/${mvpClass}Presenter.kt" />
<open file="${escapeXmlAttribute(srcOut)}/${mvpClass}Activity.kt" />
<open file="${escapeXmlAttribute(srcOut)}/${mvpClass}Contract.kt" />
<open file="${escapeXmlAttribute(srcOut)}/${mvpClass}Presenter.kt" />
</recipe>
- recipe_manifest.xml.ftl ditambahkan agar activity terdaftar di AndroidManifest.xml
- instantiate digunakan untuk membuat file-file template kita. from mereferensikan berdasarkan template yang mana akan dibuat sebuah file. to adalah alamat sekaligus penamaan dari file template yang akan dibuat.
- ${mvpClass} dan ${layoutName} adalah id yang berasal dari template.xml
- open digunakan untuk membuka file-file yang telah dibuat.
6. ViewClass.kt.ftl
Ini adalah file template pertama yang akan digunakan untuk membuat Activity
package ${escapeKotlinIdentifiers(packageName)}
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class ${mvpClass}Activity : AppCompatActivity(), ${mvpClass}Contract.View {
lateinit var presenter: ${mvpClass}Presenter
companion object {
fun startThisActivity(context: Context) {
val intent = Intent(context, ${mvpClass}Activity::class.java)
context.startActivity(intent)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.${layoutName})
}
}
- ${escapeKotlinIdentifiers(packageName)} digunakan untuk menuliskan package sesuai dengan lokasi file dibuat
- ${mvpClass} dan ${layoutName} adalah id yang berasal dari file template.xml
7. ContractClass.kt.ftl
package ${escapeKotlinIdentifiers(packageName)}
interface ${mvpClass}Contract {
interface View{
}
interface Presenter {
fun dropView()
}
}
- {escapeKotlinIdentifiers(packageName)} digunakan untuk menuliskan package sesuai dengan lokasi file dibuat
- ${mvpClass} adalah id yang berasal dari file template.xml
8. PresenterClass.kt.ftl
package ${escapeKotlinIdentifiers(packageName)}
import android.content.Context
class ${mvpClass}Presenter(var view: ${mvpClass}Contract.View)
: ${mvpClass}Contract.Presenter {
override fun dropView() {
}
}
- {escapeKotlinIdentifiers(packageName)} digunakan untuk menuliskan package sesuai dengan lokasi file dibuat
- ${mvpClass} adalah id yang berasal dari file template.xml
9. Jalankan
Setelah semua file selesai dibuat, buka Android Studio (Jika android studio telah terbuka, silahkan direstart terlebih dahulu). Dengan panduan dari tutorial ini kita bisa membuat file-file seperti pada Video di bagian awal postingan ini.
#Note
Sampai saat ini kita belum bisa membuat pilihan template activity muncul ketika project baru dibuat.
Sekian postingan ini, akhirnya kita sampai di part terakhir tentang template di IDE Android Studio. Jika ada kesalahan dalam penulisan atau penjelasan bisa diberi tahu melalui komen atau email. Terimakasih 😀