{"id":23701188,"url":"https://github.com/gitfrandu4/android-view-binding","last_synced_at":"2026-01-29T11:30:15.619Z","repository":{"id":211625147,"uuid":"548481426","full_name":"gitfrandu4/android-view-binding","owner":"gitfrandu4","description":null,"archived":false,"fork":false,"pushed_at":"2022-10-10T00:03:19.000Z","size":2758,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-30T09:32:49.846Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gitfrandu4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-10-09T16:56:42.000Z","updated_at":"2022-10-09T16:58:17.000Z","dependencies_parsed_at":"2023-12-09T19:52:44.177Z","dependency_job_id":null,"html_url":"https://github.com/gitfrandu4/android-view-binding","commit_stats":null,"previous_names":["gitfrandu4/android-view-binding"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fandroid-view-binding","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fandroid-view-binding/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fandroid-view-binding/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fandroid-view-binding/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitfrandu4","download_url":"https://codeload.github.com/gitfrandu4/android-view-binding/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239776665,"owners_count":19695151,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-30T09:32:34.593Z","updated_at":"2026-01-29T11:30:15.562Z","avatar_url":"https://github.com/gitfrandu4.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UI Elements\n\n* [Elementos visuales](https://github.com/gitfrandu4/android-view-binding#elementos-visuales)\n* [Layouts](https://github.com/gitfrandu4/android-view-binding#layouts)\n\t* [LinearLayout](https://github.com/gitfrandu4/android-view-binding#linearlayout)\n\t* [RelativeLayout](https://github.com/gitfrandu4/android-view-binding#relativelayout)\n\t* [ConstraintLayout](https://github.com/gitfrandu4/android-view-binding#constraintlayout)\n* [Scrolls](https://github.com/gitfrandu4/android-view-binding#constraintlayout)\n* [Vinculación de vista](https://github.com/gitfrandu4/android-view-binding#vinculaci%C3%B3n-de-vista)\n* [Eventos y Referencias](https://github.com/gitfrandu4/android-view-binding#eventos-y-referencias)\n* [Styles y Themes](https://github.com/gitfrandu4/android-view-binding#styles-y-themes)\n* [Drawables](https://github.com/gitfrandu4/android-view-binding#drawables)\n* [ImageView](https://github.com/gitfrandu4/android-view-binding#drawables)\n* [Weight](https://github.com/gitfrandu4/android-view-binding#weight)\n* [Espacios](https://github.com/gitfrandu4/android-view-binding#espacios)\n* [Mover contenedores por la vista](https://github.com/gitfrandu4/android-view-binding#mover-contenedores-por-la-vista)\n* [Resources](https://github.com/gitfrandu4/android-view-binding#resources)\n* [Material Design](https://github.com/gitfrandu4/android-view-binding#material-design)\n* [Mostrar imágenes al usuario](https://github.com/gitfrandu4/android-view-binding#material-design)\n* [Final result 🙈](https://github.com/gitfrandu4/android-view-binding#final-result-)\n\nUn vistazo a lo que viene:\n\n\u003cimg src=\"imgs/coming-soon.png\" alt=\"coming soon\" width=\"560\"\u003e\n\n## Elementos visuales\n\n**TextView**: muestra texto al usuario\n\n```xml\n\u003cTextView\n\tandroid:id=\"@+id/text_id\"\n\tandroid:layout_width=\"wrap_content\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:text=\"hello_world\"\n\tandroid:textColor=\"@android:color/holo_blue_dark\"\n\tandroid:textSize=\"20sp\"/\u003e\n```\n\n**EditText**: Permite al usuario editar un campo de texto\n\n```xml\n\u003cEditText\n\tandroid:id=\"@+id/editText\"\n\tandroid:layout_width=\"wrap_content\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:hint=\"Name\"\n\tandroid:inputType=\"textPersonName\"/\u003e\n```\n\n**Button**: control con texto o imagen que realiza una acción cuando el usuario lo presiona\n\n```xml\n\u003cButton\n\tandroid:layout_width=\"wrap_content\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:text=\"Enviar\" /\u003e\n```\n\n## Layouts\n\nSi queremos combinar varios elementos de tipo vista tendremos que utilizar un objeto de tipo Layout.\n\nEs un contenedor que alberga varias vistas y controla su posición.\nHay que destacar que un Layout puede tener varios contenedores dentro y que es un descendiente\nde la clase ViewGroup.\n\nLa siguiente lista describe los Layout más utilizados en Android:\n\n* **`LinearLayout`**: Dispone los elementos en una fila o en una columna.\n* **`TableLayout`**: Distribuye los elementos de forma tabular.\n* **`RelativeLayout`**: Dispone los elementos en relación a otro o al padre.\n* **`FrameLayout`**: Permite el cambio dinámico de los elementos que contiene.\n* **`ConstraintLayout`**: Versión mejorada de `RelativeLayout`, que permite una edición visual desde el editor y trabajar con porcentajes.\n\n### `LinearLayout`\n\n**LinearLayout**: Alinea todos los campos secundarios en una única dirección, de manera vertical u horizontal. Puedes especificar la dirección del diseño con el atributo `android:orientation`\n\n\u003cimg src=\"imgs/linear-layout.png\" alt=\"linear layout\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n```xml\n\u003cLinearLayout\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"match_parent\"\n\tandroid:paddingLeft=\"16dp\"\n\tandroid:paddingRight=\"16dp\"\n\tandroid:orientation=\"vertical\" \u003e\n\n\u003cEditText\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:hint=\"Nombre\" /\u003e\n\n\u003cButton\n\tandroid:layout_width=\"100dp\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:layout_gravity=\"right\"\n\tandroid:text=\"Enviar\" /\u003e\n\n\u003c/LinearLayout\u003e\n```\n\n### `RelativeLayout`\n\nDocu: https://developer.android.com/develop/ui/views/layout/relative\n\n**RelativeLayout**: Muestra vistas secundarias en posiciones relativas. La posición de cada vista puede especificarse como relativa a elementos hermanos (como a la izquierda o debajo de otra vista) o en posiciones relativas al área de `RelativeLayout` principal (como alineada a la parte inferior, izquierda o centro. \n\n\u003cimg src=\"imgs/relative-layout.png\" alt=\"relative layout\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n```xml\n\u003cRelativeLayout\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"match_parent\"\n\tandroid:paddingLeft=\"16dp\"\n\tandroid:paddingRight=\"16dp\" \u003e\n\n\u003cEditText\n\tandroid:id=\"@+id/name\"\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:hint=\"Nombre\" /\u003e\n\n\u003cButton\n\tandroid:layout_width=\"96dp\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:layout_below=\"@id/name\"\n\tandroid:layout_alignParentRight=\"true\"\n\tandroid:text=\"OK\" /\u003e\n\n\u003c/RelativeLayout\u003e\n```\n\n### `ConstraintLayout`\n\n**ConstraintLayout**: Permitirá simplificar las interfaces en anidamiento, para hacerlas lo más complejas posibles a nivel de diseño. Este layout, similar al RelativeLayout nos permitirá establecer relaciones entre todos los elementos y la propia vista padre, permitiendo así ser mucho más flexible que los demás.\n\n\u003cimg src=\"imgs/constraint-layout.png\" alt=\"constraint layout\" style=\"max-width: 100%;max-height: 240px;\" \u003e\n\n```xml\n\u003cRelativeLayout\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"match_parent\"\n\tandroid:paddingLeft=\"16dp\"\n\tandroid:paddingRight=\"16dp\" \u003e\n\n\u003cEditText\n\tandroid:id=\"@+id/name\"\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:hint=\"Nombre\" /\u003e\n\n\u003cButton\n\tandroid:layout_width=\"96dp\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:layout_below=\"@id/name\"\n\tandroid:layout_alignParentRight=\"true\"\n\tandroid:text=\"OK\" /\u003e\n\n\u003c/RelativeLayout\u003e\n```\n\n## Scrolls\n\nTambién podemos utilizar otras clases de Vistas, que son descritas a continuación:\n\n* **ScrollView**: Visualiza una columna de elementos; cuando estos no caben en pantalla se permite un deslizamiento vertical.\n\n* **NestedScrollView**: es lo mismo que el scrollview, pero soporta comportamientos anidados.\n\n* **HorizontalScrollView**: Visualiza una fila de elementos; cuando estos no caben en pantalla se permite un deslizamiento horizontal.\n\n\n## Vinculación de vista\n\n1. Kotlin extensions (actualmente desaconsejado)\n2. `findViewById`\n    * Hay que escribir más, y no es tan completa como el binding\n\n````kotlin\nfindViewById\u003cTextView\u003e(R.id.textView)\n````\n\n3. Binding: https://developer.android.com/topic/libraries/view-binding\n\n```kotlin\nclass MainActivity : AppCompatActivity() {\n    \n    // activity_main.xml =\u003e ActivityMainBinding \n    private lateinit var binding: ActivityMainBinding;\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        binding = ActivityMainBinding.inflate(layoutInflater)\n        val view = binding.root\n\n        // Forma por defecto de obtener vistas:\n        // setContentView(R.layout.activity_main) // Comentamos ya que vamos a utilizar binding\n\n        setContentView(view)\n\n\n        Log.i(\"MainActivity\", \"Ejecutando on create\")\n\n        val name = \"Francisco Javier\"\n        val textView = findViewById\u003cTextView\u003e(R.id.textView)\n\n        Log.i(\"MainActivity\", textView.text.toString())\n    }\n}\n```\n\n## Eventos y Referencias\n\n**Ids:**\n\nPara poder acceder en nuestro Activity a los elementos visuales que hemos creado en el layout (xml)\ntodos tienen que tener un id referenciado de esta manera:\n\n```xml\n\u003cButton\n    android:id=\"@+id/Enviar\"\n    android:text=\"Enviar\"\n/\u003e\n```\n\nAhora desde nuestro Activity podremos acceder a los datos que contiene o modificarlos:\n\n```kotlin\nbtEnviar.setOnClickListener {\n    // Aquí podemos establecer lo que hará nuestro código una vez pulsado el botón con id Button\n}\n```\n\n**Eventos y Referencias**\n\nSi queremos acceder al texto introducido por el usuario en un `EditText`:\n\n```kotlin\nval text = editText.text.toString()\n```\n\n## Styles y Themes\n\nStyles y Themes en android te permiten separar los detalles del diseño de tu app de la UI, similar a una hoja de estilos (CSS) en la web. \n\nUn style es una coleccioón de atributos que especifican la apariencia de una vista. Un style puede cambiar los atributos de color, fuentes, tamaños, fondos y mucho más. \n\n\u003cimg src=\"imgs/styles-and-themes.png\" alt=\"styles and themes\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\u003cimg src=\"imgs/themes-android-studio.png\" alt=\"styles and themes, android studio\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n## Drawables\n\nRecursos de elementos de diseño.\n\nUn drawable es un tipo de recurso que puede ser dibujado en pantalla. Podremos utilizarlos para especificar el aspecto que van a tener los diferentes componentes de la interfaz, o partes de éstos. Estos drawables podrán ser definidos en XML o de forma programática. \n\nEn la carpeta drawable con el botón derecho podemos crear un icono para utilizar en la app o importarlo desde nuestro ordenador. \n\n\u003cimg src=\"imgs/drawables.png\" alt=\"drawables\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\u003cimg src=\"imgs/custom-vector-asset.png\" alt=\"add vectot asset\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\n## ImageView\n\nUn ImageView nos permite mostrar una imagen y tiene propiedades que nos ayudan a adaptarlo a lo que nos interesa.\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\n\u003cLinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\txmlns:app=\"http://schemas.android.com/apk/res-auto\"\n\txmlns:tools=\"http://schemas.android.com/tools\"\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"match_parent\"\n\tandroid:gravity=\"center\"\u003e\n\n\t\u003cImageView\n\t\tandroid:padding=\"8dp\"\n\t\tandroid:clickable=\"true\"\n\t\tandroid:background=\"?selectableItemBackgroundBorderless\"\n\t\tandroid:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:src=\"@drawable/ic_baseline_delete_24\" /\u003e\n\n\u003c/LinearLayout\u003e\n```\n\nSi queremos que se pueda pulsar usamos clickable = true y el background indicado en el xml: \n\n```xml\n        android:background=\"?selectableItemBackgroundBorderless\"\n```\n\n\u003cimg src=\"imgs/image-view.png\" alt=\"ImageView\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n## Weight\n\nPodemos utilizar el peso en un componente para separarlo porcentualmente. \n\nPara hacer esto dentro de un ´LinearLayout` (esto solo lo podemos utilizar dentro de un `LinearLayout`) utilizando el peso es así:\n\n\n```xml\n\u003cLinearLayout\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"60dp\"\n\tandroid:background=\"@color/colorPrimary\"\n\tandroid:orientation=\"horizontal\"\u003e\n\n\t\u003cButton\n\t\tandroid:id=\"@+id/register\"\n\t\tandroid:layout_width=\"0dp\" \t\t\t\t// \u003c==\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:layout_weight=\"1\" \t\t\t\t// \u003c==\n\t\tandroid:padding=\"10dip\"\n\t\tandroid:text=\"Login\" /\u003e\n\n\t\u003cButton\n\t\tandroid:id=\"@+id/cancel\"\n\t\tandroid:layout_width=\"0dp\"\t\t\t\t// \u003c==\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:layout_weight=\"1\"\t\t\t\t// \u003c==\n\t\tandroid:padding=\"10dip\"\n\t\tandroid:text=\"Registro\" /\u003e\n\n\u003c/LinearLayout\u003e\n```\n\n\u003cimg src=\"imgs/weight-1.png\" alt=\"weight 1\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\nY jugando con los valores del peso obtenemos lo siguiente:\n\n```xml\n\u003cLinearLayout\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"60dp\"\n\tandroid:background=\"@color/colorPrimary\"\n\tandroid:orientation=\"horizontal\"\u003e\n\n\t\u003cButton\n\t\tandroid:id=\"@+id/register\"\n\t\tandroid:layout_width=\"0dp\"\t\t\t\t// \u003c==\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:layout_weight=\"0.3\"\t\t\t\t// \u003c==\n\t\tandroid:padding=\"10dip\"\n\t\tandroid:text=\"Login\" /\u003e\n\n\t\u003cButton\n\t\tandroid:id=\"@+id/cancel\"\n\t\tandroid:layout_width=\"0dp\"\t\t\t\t// \u003c==\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:layout_weight=\"0.7\"\t\t\t\t// \u003c==\n\t\tandroid:padding=\"10dip\"\n\t\tandroid:text=\"Registro\" /\u003e\n\n\u003c/LinearLayout\u003e\n```\n\n\u003cimg src=\"imgs/weight-2.png\" alt=\"weight 2\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n## Espacios\n\n* **margin** - Distancia entre los 4 lados\n* **marginLeft** - Distancia en el lado izquierdo\n* **marginRight** - Distancia en el lado derechpo\n* **marginTop** - Distancia en el lado de arriba\n* **marginBottom** - Distancia en el lado de abajo\n* **padding** - Distancia entre los 4 lados desde dentro\n* **paddingLeft** - Distancia en el lado izquierdo desde dentro\n* **paddingRight** - Distancia en el lado derechpo desde dentro\n* **paddingTop** - Distancia en el lado de arriba desde dentro\n* **paddingBottom** - Distancia en el lado de abajo desde dentro\n\n\n\u003cimg src=\"imgs/spaces.png\" alt=\"spaces\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\n## Mover contenedores por la vista\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\n\u003cRelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\t\txmlns:app=\"http://schemas.android.com/apk/res-auto\"\n\t\txmlns:tools=\"http://schemas.android.com/tools\"\n\t\tandroid:layout_width=\"match_parent\"\n\t\tandroid:layout_height=\"match_parent\"\n\t\tandroid:orientation=\"vertical\"\n\t\tandroid:background=\"@color/colorAccent\"\n\t\ttools:context=\".MainActivity\"\u003e\n\n\t\u003cLinearLayout\n\t\tandroid:layout_width=\"match_parent\"\n\t\tandroid:layout_height=\"60dp\"\n\t\tandroid:layout_alignParentBottom=\"true\"\n\t\tandroid:background=\"@color/colorPrimary\"\n\t\tandroid:gravity=\"bottom\"\n\t\tandroid:orientation=\"horizontal\"\u003e\n\n\t\t\u003cButton\n\t\t\tandroid:id=\"@+id/register\"\n\t\t\tandroid:layout_width=\"0dp\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:layout_weight=\"0.3\"\n\t\t\tandroid:padding=\"10dip\"\n\t\tandroid:text=\"Login\" /\u003e\n\n\t\t\u003cButton\n\t\t\tandroid:id=\"@+id/cancel\"\n\t\t\tandroid:layout_width=\"0dp\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:layout_weight=\"0.7\"\n\t\t\tandroid:padding=\"10dip\"\n\t\t\tandroid:text=\"Registro\" /\u003e\n\n\t\u003c/LinearLayout\u003e\n\n\u003c/RelativeLayout\u003e\n```\n\n\u003cimg src=\"imgs/moving-layouts.png\" alt=\"spaces\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\n## Resources\n\n```xml\nstrings.xml / strings-es.xml\n\t\u003cstring name=\"app_name\"\u003eMy Application\u003c/string\u003e\n\t\u003cstring name=\"title_activity_main2\"\u003eMainActivity\u003c/string\u003e\n\ncolors.xml\n\t\u003ccolor name=\"colorPrimary\"\u003e#6200EE\u003c/color\u003e\n\t\u003ccolor name=\"colorPrimaryDark\"\u003e#3700B3\u003c/color\u003e\n\t\u003ccolor name=\"colorAccent\"\u003e#03DAC5\u003c/color\u003e\n\ndimens.xml\n\t\u003cdimen name=\"horizontal_margin\"\u003e16dp\u003c/dimen\u003e\n\nstyles.xml\n\t\u003c!-- Base application theme. --\u003e\n\t\u003cstyle name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\"\u003e\n\t\t\u003c!-- Customize your theme here. --\u003e\n\t\t\u003citem name=\"colorPrimary\"\u003e@color/colorPrimary\u003c/item\u003e\n\t\t\u003citem name=\"colorPrimaryDark\"\u003e@color/colorPrimaryDark\u003c/item\u003e\n\t\t\u003citem name=\"colorAccent\"\u003e@color/colorAccent\u003c/item\u003e\n\t\u003c/style\u003e\n```\n\n\u003cimg src=\"imgs/resources.png\" alt=\"resources\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\n## Material Design\n\n### Diseño en Android\n\nDocu: https://material.io/components?platform=android\n\nMaterial design contiene la mayoría de componentes nativos de android con los que están hechas todas las apps y una guia de estilos.\n\n### Botones\n\nDocu: https://material.io/develop/android/components/buttons/\n\nTambién tenemos los recursos oficiales aquí, aunque pueden ser complicados de entender a la primera. \n\nHay que importar siempre esta librería (con su correspondiente versión):\n\n`implementation 'com.google.android.material:material:1.6.0'`\n\n\u003cimg src=\"imgs/material-dependency.png\" alt=\"import material library\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\nY en `styles.xml` cambiamos el theme de la app:\n\n```xml\n\u003cButton\n\tandroid:id=\"@+id/textButton\"\n\tandroid:layout_margin=\"30dp\"\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:textColor=\"@android:color/white\"\n\tandroid:backgroundTint=\"@color/colorPrimaryDark\"\n\tandroid:text=\"Text button\"\n\tstyle=\"@style/Widget.MaterialComponents.Button.TextButton\"\n/\u003e\n```\n\n\u003cimg src=\"imgs/button-material.png\" alt=\"button material design\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\n## Mostrar mensajes al usuario\n\n**Toast**:\n\nMuestra feedback sobre alguna operación realizada. Idealmente debe mostrar mensajes cortos. Aparece por un periodo corto o largo.\n\n```Kotlin\nToast.makeText(this, \"Boton pulsado!\", Toast.LENGTH_SHORT).show()\nSnackbar.make(view, \"Boton pulsado!\", Snackbar.LENGTH_SHORT).show()\n```\n\n\u003cimg src=\"imgs/toast.png\" alt=\"toast\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\n**Snackbar**:\n\nMuestra feedback sobre alguna operación realizada, y es similar a un toast aunque podemos hacer que no desaparezca tras un periodo de tiempo. Hay que usar una vista para poder llamarlo, puede ser el contenedor del activity o cualquier otra.\n\nPuede contener un botón de texto de acción\n\n\u003cimg src=\"imgs/snackbar.png\" alt=\"resources\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n## Final result 🙈\n\n\u003cimg src=\"imgs/wtf-result.png\" alt=\"wtf result\" style=\"max-width: 100%;max-height: 240px;\"\u003e\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitfrandu4%2Fandroid-view-binding","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitfrandu4%2Fandroid-view-binding","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitfrandu4%2Fandroid-view-binding/lists"}