Hola amigos 馃憢 Bienvenidos a un nuevo tutorial de Universo Android. Hoy aprenderemos todo sobre los Botones (Button) en Android, explorando los diferentes tipos, estilos personalizados, eventos de click y las mejores pr谩cticas para crear interfaces interactivas y profesionales.
Al finalizar este tutorial tendr谩s una aplicaci贸n que incluir谩:
- Button tradicional y sus variantes
- ImageButton con iconos
- FloatingActionButton (FAB)
- ToggleButton y Switch
- Estilos personalizados con XML y Material Design
- Click Listeners con diferentes m茅todos
- Botones con estados (enabled, disabled, pressed)
- Animaciones y efectos visuales
馃煩 1. ¿Qu茅 es un Button en Android?
El Button es un componente fundamental de la interfaz de usuario que permite a los usuarios ejecutar acciones mediante toques o clics. Android ofrece varios tipos de botones, cada uno optimizado para diferentes casos de uso.
馃煩 2. Tipos de Botones en Android
Android proporciona varios tipos de botones:
- Button: Bot贸n est谩ndar con texto
- ImageButton: Bot贸n con imagen sin texto
- FloatingActionButton (FAB): Bot贸n flotante de Material Design
- ToggleButton: Bot贸n de dos estados (ON/OFF)
- Switch: Interruptor deslizante
- RadioButton: Bot贸n de selecci贸n 煤nica
- CheckBox: Casilla de verificaci贸n
馃煩 3. Crear el Proyecto en Android Studio
Creamos un nuevo proyecto en Android Studio con Empty Activity.
馃煩 4. Agregar Dependencias de Material Design
Abre el archivo build.gradle (Module: app) y agrega:
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
}Sincroniza el proyecto despu茅s de agregar las dependencias.
馃煩 5. Dise帽o XML con Diferentes Tipos de Botones
Crea un archivo llamado:
馃搫 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- T铆tulo Principal -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Botones Est谩ndar"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="#2196F3"
android:layout_marginBottom="16dp" />
<!-- Button Normal -->
<Button
android:id="@+id/btnNormal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bot贸n Normal"
android:textSize="16sp"
android:layout_marginTop="8dp" />
<!-- Button con Icono -->
<Button
android:id="@+id/btnWithIcon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bot贸n con Icono"
android:drawableLeft="@android:drawable/ic_dialog_email"
android:drawablePadding="8dp"
android:textSize="16sp"
android:layout_marginTop="8dp" />
<!-- Button Deshabilitado -->
<Button
android:id="@+id/btnDisabled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bot贸n Deshabilitado"
android:enabled="false"
android:textSize="16sp"
android:layout_marginTop="8dp" />
<!-- Separador -->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#CCCCCC"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp" />
<!-- T铆tulo: Material Design Buttons -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Material Design Buttons"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="#4CAF50"
android:layout_marginBottom="16dp" />
<!-- Material Button Filled -->
<com.google.android.material.button.MaterialButton
android:id="@+id/btnMaterialFilled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Material Filled"
app:cornerRadius="8dp"
style="@style/Widget.MaterialComponents.Button"
android:layout_marginTop="8dp" />
<!-- Material Button Outlined -->
<com.google.android.material.button.MaterialButton
android:id="@+id/btnMaterialOutlined"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Material Outlined"
app:cornerRadius="8dp"
app:strokeColor="#2196F3"
app:strokeWidth="2dp"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_marginTop="8dp" />
<!-- Material Button Text -->
<com.google.android.material.button.MaterialButton
android:id="@+id/btnMaterialText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Material Text"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_marginTop="8dp" />
<!-- Material Button con Icono -->
<com.google.android.material.button.MaterialButton
android:id="@+id/btnMaterialIcon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Con Icono Material"
app:icon="@android:drawable/ic_menu_camera"
app:iconGravity="textStart"
app:cornerRadius="8dp"
android:layout_marginTop="8dp" />
<!-- Separador -->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#CCCCCC"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp" />
<!-- T铆tulo: Image Buttons -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Image Buttons"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="#FF9800"
android:layout_marginBottom="16dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<!-- ImageButton 1 -->
<ImageButton
android:id="@+id/btnImage1"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@android:drawable/ic_menu_camera"
android:background="@drawable/round_button"
android:scaleType="centerInside"
android:layout_margin="8dp"
android:contentDescription="C谩mara" />
<!-- ImageButton 2 -->
<ImageButton
android:id="@+id/btnImage2"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@android:drawable/ic_menu_gallery"
android:background="@drawable/round_button"
android:scaleType="centerInside"
android:layout_margin="8dp"
android:contentDescription="Galer铆a" />
<!-- ImageButton 3 -->
<ImageButton
android:id="@+id/btnImage3"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@android:drawable/ic_menu_share"
android:background="@drawable/round_button"
android:scaleType="centerInside"
android:layout_margin="8dp"
android:contentDescription="Compartir" />
</LinearLayout>
<!-- Separador -->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#CCCCCC"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp" />
<!-- T铆tulo: Toggle Buttons -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Toggle y Switch"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="#E91E63"
android:layout_marginBottom="16dp" />
<!-- ToggleButton -->
<ToggleButton
android:id="@+id/toggleButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textOn="Activado"
android:textOff="Desactivado"
android:layout_marginTop="8dp" />
<!-- Switch -->
<Switch
android:id="@+id/switchButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Notificaciones"
android:layout_marginTop="8dp" />
<!-- Material Switch -->
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/materialSwitch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Modo Oscuro"
android:layout_marginTop="8dp" />
<!-- Separador -->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#CCCCCC"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp" />
<!-- T铆tulo: Botones Personalizados -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Botones Personalizados"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="#9C27B0"
android:layout_marginBottom="16dp" />
<!-- Bot贸n con Gradiente -->
<Button
android:id="@+id/btnGradient"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bot贸n con Gradiente"
android:textColor="#FFFFFF"
android:background="@drawable/gradient_button"
android:textSize="16sp"
android:layout_marginTop="8dp" />
<!-- Bot贸n Redondeado -->
<Button
android:id="@+id/btnRounded"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bot贸n Redondeado"
android:textColor="#FFFFFF"
android:background="@drawable/rounded_button"
android:textSize="16sp"
android:layout_marginTop="8dp" />
<!-- Bot贸n con Borde -->
<Button
android:id="@+id/btnBorder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bot贸n con Borde"
android:textColor="#2196F3"
android:background="@drawable/border_button"
android:textSize="16sp"
android:layout_marginTop="8dp" />
<!-- TextView para mostrar resultados -->
<TextView
android:id="@+id/txtResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Resultados aparecer谩n aqu铆"
android:textSize="16sp"
android:textColor="#000000"
android:padding="16dp"
android:background="#F5F5F5"
android:layout_marginTop="24dp" />
</LinearLayout>
</ScrollView>馃煩 6. Crear Drawables para Botones Personalizados
Drawable 1: Bot贸n Redondeado
Crea res/drawable/rounded_button.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#2196F3" />
<corners android:radius="24dp" />
<padding
android:left="16dp"
android:top="12dp"
android:right="16dp"
android:bottom="12dp" />
</shape>Drawable 2: Bot贸n con Gradiente
Crea res/drawable/gradient_button.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#FF5722"
android:endColor="#E91E63"
android:angle="45"
android:type="linear" />
<corners android:radius="16dp" />
<padding
android:left="16dp"
android:top="12dp"
android:right="16dp"
android:bottom="12dp" />
</shape>Drawable 3: Bot贸n con Borde
Crea res/drawable/border_button.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFF" />
<stroke
android:width="2dp"
android:color="#2196F3" />
<corners android:radius="8dp" />
<padding
android:left="16dp"
android:top="12dp"
android:right="16dp"
android:bottom="12dp" />
</shape>Drawable 4: Bot贸n Circular
Crea res/drawable/round_button.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#4CAF50" />
<size
android:width="64dp"
android:height="64dp" />
</shape>馃煩 7. Crear Selector para Estados del Bot贸n
Crea res/drawable/button_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Estado Presionado -->
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#1976D2" />
<corners android:radius="8dp" />
</shape>
</item>
<!-- Estado Deshabilitado -->
<item android:state_enabled="false">
<shape android:shape="rectangle">
<solid android:color="#CCCCCC" />
<corners android:radius="8dp" />
</shape>
</item>
<!-- Estado Normal -->
<item>
<shape android:shape="rectangle">
<solid android:color="#2196F3" />
<corners android:radius="8dp" />
</shape>
</item>
</selector>馃煩 8. L贸gica Java con Click Listeners
馃搫 MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.switchmaterial.SwitchMaterial;
public class MainActivity extends AppCompatActivity {
Button btnNormal, btnWithIcon, btnDisabled, btnGradient, btnRounded, btnBorder;
MaterialButton btnMaterialFilled, btnMaterialOutlined, btnMaterialText, btnMaterialIcon;
ImageButton btnImage1, btnImage2, btnImage3;
ToggleButton toggleButton;
Switch switchButton;
SwitchMaterial materialSwitch;
TextView txtResult;
int clickCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Inicializar vistas
initializeViews();
// Configurar Click Listeners - M茅todo 1: Lambda
setupLambdaListeners();
// Configurar Click Listeners - M茅todo 2: Clase An贸nima
setupAnonymousListeners();
// Configurar Click Listeners - M茅todo 3: Implementar Interface
setupInterfaceListeners();
// Configurar Toggle y Switch
setupToggleAndSwitch();
// Configurar Image Buttons
setupImageButtons();
}
private void initializeViews() {
// Botones est谩ndar
btnNormal = findViewById(R.id.btnNormal);
btnWithIcon = findViewById(R.id.btnWithIcon);
btnDisabled = findViewById(R.id.btnDisabled);
btnGradient = findViewById(R.id.btnGradient);
btnRounded = findViewById(R.id.btnRounded);
btnBorder = findViewById(R.id.btnBorder);
// Material Buttons
btnMaterialFilled = findViewById(R.id.btnMaterialFilled);
btnMaterialOutlined = findViewById(R.id.btnMaterialOutlined);
btnMaterialText = findViewById(R.id.btnMaterialText);
btnMaterialIcon = findViewById(R.id.btnMaterialIcon);
// Image Buttons
btnImage1 = findViewById(R.id.btnImage1);
btnImage2 = findViewById(R.id.btnImage2);
btnImage3 = findViewById(R.id.btnImage3);
// Toggle y Switch
toggleButton = findViewById(R.id.toggleButton);
switchButton = findViewById(R.id.switchButton);
materialSwitch = findViewById(R.id.materialSwitch);
// TextView resultado
txtResult = findViewById(R.id.txtResult);
}
// M脡TODO 1: Click Listener con Lambda (Java 8+)
private void setupLambdaListeners() {
btnNormal.setOnClickListener(v -> {
clickCount++;
updateResult("Bot贸n Normal clickeado - Total: " + clickCount);
});
btnMaterialFilled.setOnClickListener(v ->
updateResult("Material Filled clickeado")
);
}
// M脡TODO 2: Click Listener con Clase An贸nima
private void setupAnonymousListeners() {
btnWithIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateResult("Bot贸n con Icono clickeado");
}
});
btnGradient.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateResult("Bot贸n con Gradiente clickeado");
}
});
}
// M脡TODO 3: Click Listener implementando Interface
private void setupInterfaceListeners() {
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnMaterialOutlined) {
updateResult("Material Outlined clickeado");
} else if (v.getId() == R.id.btnMaterialText) {
updateResult("Material Text clickeado");
} else if (v.getId() == R.id.btnMaterialIcon) {
updateResult("Material con Icono clickeado");
} else if (v.getId() == R.id.btnRounded) {
updateResult("Bot贸n Redondeado clickeado");
} else if (v.getId() == R.id.btnBorder) {
updateResult("Bot贸n con Borde clickeado");
}
}
};
btnMaterialOutlined.setOnClickListener(listener);
btnMaterialText.setOnClickListener(listener);
btnMaterialIcon.setOnClickListener(listener);
btnRounded.setOnClickListener(listener);
btnBorder.setOnClickListener(listener);
}
// M脡TODO 4: Click desde XML (onClick attribute)
public void onButtonClick(View view) {
updateResult("M茅todo onClick desde XML");
}
private void setupToggleAndSwitch() {
// ToggleButton
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String status = isChecked ? "Activado" : "Desactivado";
updateResult("Toggle Button: " + status);
}
});
// Switch
switchButton.setOnCheckedChangeListener((buttonView, isChecked) -> {
String status = isChecked ? "Notificaciones ON" : "Notificaciones OFF";
updateResult(status);
Toast.makeText(this, status, Toast.LENGTH_SHORT).show();
});
// Material Switch
materialSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
String status = isChecked ? "Modo Oscuro Activado" : "Modo Oscuro Desactivado";
updateResult(status);
// Cambiar color de fondo como ejemplo
if (isChecked) {
findViewById(android.R.id.content).setBackgroundColor(0xFF424242);
} else {
findViewById(android.R.id.content).setBackgroundColor(0xFFFFFFFF);
}
});
}
private void setupImageButtons() {
btnImage1.setOnClickListener(v -> {
updateResult("C谩mara clickeada");
Toast.makeText(this, "Abrir C谩mara", Toast.LENGTH_SHORT).show();
});
btnImage2.setOnClickListener(v -> {
updateResult("Galer铆a clickeada");
Toast.makeText(this, "Abrir Galer铆a", Toast.LENGTH_SHORT).show();
});
btnImage3.setOnClickListener(v -> {
updateResult("Compartir clickeado");
Toast.makeText(this, "Compartir contenido", Toast.LENGTH_SHORT).show();
});
}
// M脡TODO 5: Long Click Listener
private void setupLongClickListener() {
btnNormal.setOnLongClickListener(v -> {
updateResult("Long Click detectado en Bot贸n Normal");
Toast.makeText(this, "Mantuviste presionado el bot贸n", Toast.LENGTH_SHORT).show();
return true; // true = evento consumido
});
}
// M脡TODO 6: Habilitar/Deshabilitar bot贸n din谩micamente
private void toggleButtonState() {
if (btnDisabled.isEnabled()) {
btnDisabled.setEnabled(false);
btnDisabled.setText("Deshabilitado");
} else {
btnDisabled.setEnabled(true);
btnDisabled.setText("Habilitado");
}
}
private void updateResult(String message) {
txtResult.setText(message);
}
}馃煩 9. FloatingActionButton (FAB)
Agrega un FAB al layout:
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Tu contenido aqu铆 -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:src="@android:drawable/ic_input_add"
app:backgroundTint="#4CAF50"
app:tint="#FFFFFF" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>En Java:
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(v -> {
Toast.makeText(this, "FAB clickeado", Toast.LENGTH_SHORT).show();
});馃煩 10. Crear Estilos Reutilizables
Crea un archivo res/values/styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Estilo para Bot贸n Principal -->
<style name="PrimaryButton" parent="Widget.MaterialComponents.Button">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#FFFFFF</item>
<item name="backgroundTint">#2196F3</item>
<item name="cornerRadius">8dp</item>
<item name="android:layout_marginTop">8dp</item>
</style>
<!-- Estilo para Bot贸n Secundario -->
<style name="SecondaryButton" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#2196F3</item>
<item name="strokeColor">#2196F3</item>
<item name="strokeWidth">2dp</item>
<item name="cornerRadius">8dp</item>
<item name="android:layout_marginTop">8dp</item>
</style>
<!-- Estilo para Bot贸n de Texto -->
<style name="TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#2196F3</item>
<item name="android:layout_marginTop">8dp</item>
</style>
<!-- Estilo para Bot贸n Peligroso -->
<style name="DangerButton" parent="Widget.MaterialComponents.Button">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#FFFFFF</item>
<item name="backgroundTint">#F44336</item>
<item name="cornerRadius">8dp</item>
<item name="android:layout_marginTop">8dp</item>
</style>
</resources>Aplicar estilos en XML:
<com.google.android.material.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bot贸n Primario"
style="@style/PrimaryButton" />馃煩 11. Propiedades Importantes de Button
| Propiedad | Descripci贸n |
|---|---|
android:text | Texto del bot贸n |
android:textColor | Color del texto |
android:textSize | Tama帽o del texto |
android:background | Fondo del bot贸n |
android:enabled | Habilita/deshabilita el bot贸n |
android:onClick | M茅todo a ejecutar al hacer click (XML) |
android:drawableLeft | Icono a la izquierda |
android:drawablePadding | Espacio entre icono y texto |
app:cornerRadius | Radio de las esquinas (Material) |
app:strokeColor | Color del borde (Material) |
app:strokeWidth | Grosor del borde (Material) |
app:icon | Icono del bot贸n (Material) |
app:iconGravity | Posici贸n del icono (Material) |
馃煩 12. Button con Animaci贸n
private void animateButton(Button button) {
// Animaci贸n de escala
button.animate()
.scaleX(1.1f)
.scaleY(1.1f)
.setDuration(200)
.withEndAction(() -> {
button.animate()
.scaleX(1.0f)
.scaleY(1.0f)
.setDuration(200)
.start();
})
.start();
}馃煩 13. M茅todos para Configurar Click Listeners
M茅todo 1: Lambda (Recomendado - Java 8+)
button.setOnClickListener(v -> {
// Tu c贸digo aqu铆
});M茅todo 2: Clase An贸nima
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Tu c贸digo aqu铆
}
});M茅todo 3: Desde XML (onClick attribute)
<Button
android:onClick="myMethod"
android:text="Click Me" />public void myMethod(View view) {
// Tu c贸digo aqu铆
}M茅todo 4: Implementar Interface en Activity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// Tu c贸digo aqu铆
}
}▶️ C贸mo Ejecutar tu Aplicaci贸n
- Abre Android Studio
- Presiona Run para ejecutar el proyecto
- Si no tienes un emulador, crea uno desde AVD Manager
- Ver谩s todos los tipos de botones con diferentes estilos funcionando
馃И Resultado Final
Tu aplicaci贸n mostrar谩:
- Botones est谩ndar con diferentes estilos
- Material Design Buttons (Filled, Outlined, Text)
- Image Buttons circulares con iconos
- Toggle Button y Switch con estados
- Botones personalizados (gradientes, bordes, redondeados)
- Click Listeners funcionando con diferentes m茅todos
- Estados visuales (normal, presionado, deshabilitado)
馃摜 Descargar Proyecto de Ejemplo
Puedes descargar el proyecto completo desde el siguiente enlace:
馃憠 Descargar
馃檶 Gracias por Visitar mi Blog
Si este tutorial te fue 煤til:
✔️ Comp谩rtelo
✔️ D茅jame un comentario
✔️ S铆gueme para m谩s contenido sobre Android y programaci贸n
¡Estoy aqu铆 para ayudarte!
❓ Preguntas Frecuentes (FAQ)
1. ¿Cu谩l es la diferencia entre Button y MaterialButton?
MaterialButton es parte de Material Design y ofrece m谩s opciones de personalizaci贸n como bordes, iconos integrados, esquinas redondeadas y estilos predefinidos m谩s modernos que el Button est谩ndar.
2. ¿C贸mo puedo deshabilitar un bot贸n temporalmente?
Usa el m茅todo button.setEnabled(false) para deshabilitar y button.setEnabled(true) para habilitar. Los botones deshabilitados no responden a clicks y cambian su apariencia visual autom谩ticamente.
3. ¿Cu谩l es el mejor m茅todo para configurar Click Listeners?
El m茅todo Lambda es el m谩s limpio y legible en Java 8+. La clase an贸nima es 煤til cuando necesitas compatibilidad con versiones antiguas o l贸gica m谩s compleja dentro del listener.
4. ¿Puedo agregar m煤ltiples iconos a un bot贸n?
Con Button est谩ndar puedes usar drawableLeft, drawableRight, drawableTop y drawableBottom. Con MaterialButton puedes usar la propiedad app:icon y controlar su posici贸n con app:iconGravity.

No hay comentarios:
Publicar un comentario