Live templates en Android Studio

¿Qué son los live templates?

Los Live Templates en Android Studio son una característica muy útil que permite a los desarrolladores de aplicaciones Android ahorrar tiempo y aumentar su productividad. Estos son fragmentos de código predefinidos que se pueden insertar rápidamente en el editor de código con solo escribir una abreviatura y presionar la tecla "Tab".

En resumen, los Live Templates en Android Studio son una herramienta poderosa que ayuda a los desarrolladores a escribir código de forma más rápida y eficiente al proporcionar fragmentos de código predefinidos que se pueden insertar con facilidad.

¿Cómo creo mi primer live template?

Abrir Preferencias:

  • Ve a Android Studio > Settings 

Busca Live Templates:

  • En el panel de la izquierda, navega a Editor > Live Templates.

Añadir un nuevo grupo 

  • Si deseas agrupar tus plantillas, puedes crear un nuevo grupo seleccionando el ícono de + y eligiendo Template Group. Dale un nombre relevante.
  • Si deseas añadir la plantilla a un grupo existente (como "Kotlin"), selecciona ese grupo.

Creando un nuevo Live Template 


¿Cómo se usan los live templates?

Una vez creado nuestro live template podemos insertar rápidamente escribiendo la abreviación. Son especialmente útiles para generar código repetitivo de manera eficiente y consistente.


Mis lives templates favoritos


Toast

Toast.makeText(requireContext(), "",Toast.LENGTH_SHORT).show()​

Logcat

Log.d("Whats",value)

Json en Alert:

fun <T> showJsonAlert(data: T) {
   val gson: Gson = GsonBuilder().setPrettyPrinting().create()
   val jsonData = gson.toJson(data)
   val alert = AlertDialog.Builder(requireContext()).setTitle("Json")
       alert.setMessage(Html.fromHtml("<pre>${jsonData}</pre>"))
       alert.show()
}

Binding en Fragment

private var _binding: FragmentTemplateBinding? = null
private val mBinding get() = _binding!!
//onCreateView
_binding = FragmentTemplateBinding.inflate(inflater, container, false)
return mBinding.root

Glide:

Glide.with(context)
.load(movie.image_url)
.thumbnail(Glide.with(context).load(R.raw.your_loading))
.error(R.drawable.your_error_image)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.centerCrop().into(mBinding.ivMovieImage)

Adapter

class ModelAdapter(
    private val mymodel: MutableList<Model>,
    private val listener: OnModelListener
) : RecyclerView.Adapter<ModelAdapter.ViewHolder>() {

    private lateinit var mContext: Context

    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val mBinding = ItemModelBinding.bind(view)
/* interface OnModelListener { fun onClickModel(model: Model){} }*/
        fun setListener(mymodel: Model) {
            mBinding.root.setOnClickListener {
        listener.onClickModel(mymodel)
            }
/*mBinding.ibOptions.setOnClickListener {showCustomMenu(mymodel,it)}*/
}
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        mContext = parent.context
        val view = LayoutInflater.from(mContext).inflate(R.layout.item_model, parent, false)
        return ViewHolder(view)
    }


    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val mymodel = mymodel[position]
        with(holder) {
            mBinding.tvModel.text = mymodel.title
            Glide.with(mContext)
                .load(mymodel.path)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .centerCrop()
                .into(mBinding.ivModel)
            setListener(mymodel
        }
    }

    fun createModel(newModel: Model) {
        mymodel.add(0, newModel)
        notifyItemInserted(0)
      //notifyItemInserted(model.size - 1)
    }

    fun updateModel(updatedModel: Model) {
        val index = mymodel.indexOfFirst { it.id == updatedModel.id }
        if (index != -1) {
            mymodel[index] = updatedModel
            notifyItemChanged(index)
        }
    }

    fun deleteModel(_model: Model) {
        val index = mymodel.indexOf(_model)
        if (index != -1) {
            mymodel.removeAt(index)
            notifyItemRemoved(index)
        }
    }

    fun updateModelList(newModelList: List<Model>) {
        mymodel.clear()
        mymodel.addAll(newModelList)
        notifyDataSetChanged()
    }

    override fun getItemCount(): Int = model.size

    private fun showCustomMenu(model: Model, anchor: View) {
        val popupView = LayoutInflater.from(mContext).inflate(R.layout.your_custom_menu, null)
        val popupWindow = PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true)

        popupView.findViewById<TextView>(R.id.tv_option_1).setOnClickListener {
          //  listener.onClickModel(video)
            popupWindow.dismiss()
        }

        popupView.findViewById<TextView>(R.id.tv_option_2).setOnClickListener {
          // listener.onOtherEventModel(video)
            popupWindow.dismiss()
        }

        popupView.findViewById<TextView>(R.id.tv_option_3).setOnClickListener {
          //  listener.onOtherEventModel(video)
            popupWindow.dismiss()
        }

        popupWindow.showAsDropDown(anchor)
    }
}



Live templates en Android Studio
Fraporitmos 7 de julio de 2024
Compartir
Archivo