项目作者: agamkoradiya

项目描述 :
A curated android live templates to make your android development more fast🚀 and easy✨.
高级语言:
项目地址: git://github.com/agamkoradiya/Android-Live-Templates.git
创建时间: 2021-05-15T03:18:57Z
项目社区:https://github.com/agamkoradiya/Android-Live-Templates

开源协议:Apache License 2.0

下载



Star Badge

Poster


Star Badge
Fork Badge
Contributors Badge
License Badge


Content :notebook:

What is live template? 😮

Live Templates are code snippets that you can insert into your code by typing their abbreviation and pressing tab.
By using them, you can quickly and intelligently add frequently used code patterns and constructs to your code, letting the IDE do the tedious work for you.

Demo 💻

How to import all live templates

How to import all live templates in 1 minute? 💥

  1. Download AndroidLiveTemplates.zip file
  2. Then follow below video tutorial


    How to import all live templates

CheatSheet 📄
































































































































































































































































































Write Only :keyboard: You will get :sparkles:


:diamonds: Adapters :diamonds:

  1. adapter list


kotlin class $FILE_NAME$ : androidx.recyclerview.widget.ListAdapter<$TYPE$, $FILE_NAME$.$HOLDER_NAME$ViewHolder>(DiffCallback()) { override fun onCreateViewHolder(parent: android.view.ViewGroup, viewType: Int): $HOLDER_NAME$ViewHolder { val binding = $BINDING$.inflate( android.view.LayoutInflater.from(parent.context), parent, false ) return $HOLDER_NAME$ViewHolder(binding) } override fun onBindViewHolder(holder: $HOLDER_NAME$ViewHolder, position: Int) { val currentItem = getItem(position) } inner class $HOLDER_NAME$ViewHolder(private val binding: $BINDING$) : androidx.recyclerview.widget.RecyclerView.ViewHolder(binding.root) {} class DiffCallback : androidx.recyclerview.widget.DiffUtil.ItemCallback<$TYPE$>() { override fun areItemsTheSame(oldItem: $TYPE$, newItem: $TYPE$) = oldItem.id == newItem.id override fun areContentsTheSame(oldItem: $TYPE$, newItem: $TYPE$) = oldItem == newItem } }

  1. adapter normal


kotlin class $FILE_NAME$ : androidx.recyclerview.widget.RecyclerView.Adapter<$FILE_NAME$.MyViewHolder>() { class MyViewHolder(itemView: android.view.View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView) {} override fun onCreateViewHolder(parent: android.view.ViewGroup, viewType: Int): MyViewHolder { return MyViewHolder( android.view.LayoutInflater.from(parent.context).inflate(R.layout.$LAYOUT$, parent, false) ) } override fun getItemCount(): Int { TODO("Not yet implemented") } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { TODO("Not yet implemented") } }



:diamonds: View Binding :diamonds:

  1. binding activity


kotlin class $FILE_NAME$ : androidx.appcompat.app.AppCompatActivity() { private lateinit var binding: $BINDING_LAYOUT$ override fun onCreate(savedInstanceState: android.os.Bundle?) { super.onCreate(savedInstanceState) binding = $BINDING_LAYOUT$.inflate(layoutInflater) val view = binding.root setContentView(view) } }

  1. binding fragment


kotlin class $FILE_NAME$ : androidx.fragment.app.Fragment() { private var _binding: $BINDING_LAYOUT$? = null private val binding get() = _binding!! override fun onCreateView( inflater: android.view.LayoutInflater, container: android.view.ViewGroup?, savedInstanceState: android.os.Bundle? ): android.view.View { _binding = $BINDING_LAYOUT$.inflate(inflater, container, false) return binding.root } override fun onDestroyView() { super.onDestroyView() _binding = null } }



:diamonds: Retrofit Library :diamonds:

  1. retrofit instance


kotlin class $FILE_NAME$ { companion object { private val retrofit by lazy { val logging = okhttp3.logging.HttpLoggingInterceptor() logging.setLevel(okhttp3.logging.HttpLoggingInterceptor.Level.$TYPE$) val client = okhttp3.OkHttpClient.Builder() .addInterceptor(logging) .build() retrofit2.Retrofit.Builder() .baseUrl($BASE_URL$) .addConverterFactory(retrofit2.converter.gson.GsonConverterFactory.create()) .client(client) .build() } val api by lazy { retrofit.create($API_NAME$::class.java) } } }



:diamonds: Room Database :diamonds:

  1. room db


kotlin @androidx.room.Database( entities = [$TABLE_NAME$::class], version = 1, exportSchema = false ) @androidx.room.TypeConverters($CONVERTER_NAME$::class) abstract class $FILE_NAME$ : androidx.room.RoomDatabase() { abstract fun $DAO_NAME$(): $DAO_TYPE$ }

  1. room db with singleton


kotlin @androidx.room.Database( entities = [$TABLE_NAME$::class], version = 1, exportSchema = false ) @androidx.room.TypeConverters($CONVERTER_NAME$::class) abstract class $FILE_NAME$ : androidx.room.RoomDatabase() { abstract fun $DAO_NAME$(): $DAO_TYPE$ companion object { @Volatile private var INSTANCE: $FILE_NAME$? = null private val LOCK = Any() fun getDatabase(context: android.content.Context): $FILE_NAME$ = INSTANCE ?: synchronized(LOCK) { INSTANCE ?: buildDatabase(context).also { INSTANCE = it } } private fun buildDatabase(context: android.content.Context) = androidx.room.Room.databaseBuilder( context.applicationContext, $FILE_NAME$::class.java, "$DB_NAME$.db" ).build() } }

  1. room dao


kotlin import androidx.room.* @Dao interface $FILE_NAME$ { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert$TABLE_NAME$($VAR_NAME$: $TABLE_NAME$) @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertAll$TABLE_NAME$(vararg $VAR_NAME$s: $TABLE_NAME$) @Update suspend fun update($VAR_NAME$: $TABLE_NAME$) @Delete suspend fun delete($VAR_NAME$: $TABLE_NAME$) @Query("SELECT * FROM $VAR_NAME$") fun getAll$TABLE_NAME$(): List<$TABLE_NAME$> }

  1. room converter for list of string


kotlin // List<String> <-> String @androidx.room.TypeConverter fun fromList(list: List<String>): String { return com.google.gson.Gson().toJson(list) } @androidx.room.TypeConverter fun toList(string: String): List<String> { return com.google.gson.Gson().fromJson(string, object : com.google.gson.reflect.TypeToken<List<String>>() {}.type) }

  1. room converter for date


kotlin // Date <-> Long @androidx.room.TypeConverter fun fromTimestamp(value: Long?): java.util.Date? { return value?.let { java.util.Date(it) } } @androidx.room.TypeConverter fun dateToTimestamp(date: java.util.Date?): Long? { return date?.time?.toLong() }

  1. room converter for bitmap


kotlin // Bitmap <-> ByteArray @androidx.room.TypeConverter fun fromBitmap(bitmap: android.graphics.Bitmap): ByteArray { val outputStream = java.io.ByteArrayOutputStream() bitmap.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, outputStream) return outputStream.toByteArray() } @androidx.room.TypeConverter fun toBitmap(byteArray: ByteArray): android.graphics.Bitmap { return android.graphics.BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size) }



:diamonds: Dependency Injection :diamonds:

  1. di hilt app


kotlin @dagger.hilt.android.HiltAndroidApp class $FILE_NAME$ : android.app.Application() { }

  1. di retrofit module


kotlin @javax.inject.Singleton @dagger.Provides fun provideRetrofit(): retrofit2.Retrofit = retrofit2.Retrofit.Builder() .baseUrl($BASE_URL$) .addConverterFactory(retrofit2.converter.gson.GsonConverterFactory.create()) .build() @javax.inject.Singleton @dagger.Provides fun provide$API_NAME$(retrofit: retrofit2.Retrofit): $API$ = retrofit.create($API$::class.java)

  1. di room module


kotlin @javax.inject.Singleton @dagger.Provides fun provideDatabase( @dagger.hilt.android.qualifiers.ApplicationContext context: android.content.Context ) = androidx.room.Room.databaseBuilder( context, $DATABASE_CLASS$::class.java, "$DATABASE_NAME$" ).build() @javax.inject.Singleton @dagger.Provides fun provideDao(database: $DATABASE_CLASS$) = database.$METHOD$



:diamonds: Drawable :diamonds:

  1. shape bubble


kotlin <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:bottomRightRadius="10dp" android:radius="40dp" ></corners> <stroke android:width="1dp" android:color="@color/$STROKE_COLOR$" ></stroke> <size android:width="50dp" android:height="50dp" ></size> <solid android:color="@color/$SOLID_COLOR$" ></solid> </shape>

  1. shape halfcircle


kotlin <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:topLeftRadius="60dp" android:topRightRadius="60dp" ></corners> <size android:width="120dp" android:height="60dp" ></size> <solid android:color="@color/$SOLID_COLOR$" ></solid> </shape>

  1. shape line


kotlin <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="3dp" android:color="@color/$STROKE_COLOR$" ></stroke> <size android:height="1dp" ></size> </shape>

  1. shape oval


kotlin <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <stroke android:width="3dp" android:color="@color/$STROKE_COLOR$" ></stroke> <solid android:color="@color/$SOLID_COLOR$" ></solid> </shape>

  1. shape ractangle


kotlin <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="10dp" ></corners> <stroke android:width="3dp" android:color="@color/$STROKE_COLOR$" ></stroke> <solid android:color="@color/$SOLID_COLOR$" ></solid> </shape>

  1. shape ring


kotlin <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:thickness="5dp" android:useLevel="false"> <solid android:color="@color/$SOLID_COLOR$" ></solid> </shape>

  1. shape round


kotlin <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:innerRadius="0dp" android:shape="ring" android:thickness="100dp" android:useLevel="false"> <solid android:color="@color/$SOLID_COLOR$" ></solid> </shape>

  1. state list


kotlin <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/$DRAWABLE1$" android:state_pressed="true" ></item> <!-- pressed --> <item android:drawable="@drawable/$DRAWABLE2$" android:state_focused="true" ></item> <!-- focused --> <item android:drawable="@drawable/$DRAWABLE3$" android:state_hovered="true" ></item> <!-- hovered --> <item android:drawable="@drawable/$DRAWABLE4$" android:state_selected="true" ></item> <!-- selected --> <item android:drawable="@drawable/$DRAWABLE5$" android:state_checkable="true" ></item> <!-- checkable --> <item android:drawable="@drawable/$DRAWABLE6$" android:state_checked="true" ></item> <!-- checked --> <item android:drawable="@drawable/$DRAWABLE7$" android:state_enabled="true" ></item> <!-- enabled --> <item android:drawable="@drawable/$DRAWABLE8$" android:state_activated="true" ></item> <!-- activated --> <item android:drawable="@drawable/$DRAWABLE9$" android:state_window_focused="true" ></item> <!-- window_focused --> <item android:drawable="@drawable/$DRAWABLE$" ></item> <!-- default --> </selector>



:diamonds: XML :diamonds:

  1. centerhorizontal


kotlin app:layout_constraintEnd_toStartOf="@+id/$VIEWIDSTART$" app:layout_constraintStart_toEndOf="@+id/$VIEWIDEND$"

  1. center_horizontal_parent


kotlin app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"

  1. center_parent


kotlin app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"

  1. center_vartical


kotlin app:layout_constraintBottom_toTopOf="@+id/$VIEWIDTOP$" app:layout_constraintTop_toBottomOf="@+id/$VIEWIDBOTTOM$"

  1. center_vartical_parent


kotlin app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent"

  1. xml_menu


```kotlin
<?xml version=”1.0” encoding=”utf-8”?>


<item
android:id=”@+id/menu$ID1$”
android:icon=”@drawable/$ICON1$”
android:title=”@string/$TITLE1$”
app:showAsAction=”$ACTION1$” >










</td> </tr> <tr></tr> <tr> <td colspan="2"> </td> </tr> <tr> <td align="center" colspan="2"> <div name="util"> :diamonds: Util :diamonds: </div> </td> </tr> <tr> <td colspan="2"> </td> </tr> <tr></tr> <tr> <td> <pre> util resource </pre> </td> <td>kotlin
sealed class Resource(val data: T?, val message: String?) {
class Success(data: T) : Resource(data, null)
class Error(message: String) : Resource(null, message)
}
</td> </tr> <tr></tr> <tr> <td> <pre> util toast </pre> </td> <td>kotlin
fun android.content.Context.toast(message: CharSequence) =
android.widget.Toast.makeText(this, message, android.widget.Toast.$LENGTH$).show()
</td> </tr> <tr></tr> <tr> <td colspan="2"> </td> </tr> <tr> <td align="center" colspan="2"> <div name="gradle-dependencies"> :diamonds: Dependencies :diamonds: </div> </td> </tr> <tr> <td colspan="2"> </td> </tr> <tr></tr> <tr> <td> <pre> view and data binding </pre> </td> <td>kotlin
buildFeatures {
viewBinding true
dataBinding true
}
</td> </tr> <tr></tr> <tr> <td> <pre> view binding </pre> </td> <td>kotlin
buildFeatures {
viewBinding true
}
```

How to create your own live templates? 💡


Official documentation

Live template variables

Suggest me



If you have any suggestion or you want to add any other templates than ping me on Instagram Badge

Contribute

Contributions are always welcome!😇
Please read the contribution guidelines first.