Vous êtes sur la page 1sur 49

Contacto

BLOG PRODUCTOS COMIENZA AQU

BLOG PRODUCTOS COMIENZA AQU

Como Crear Dilogos En


Android?
James Revelo junio 4, 2015

Como ya has de
suponer, los dilogos
son elementos en la
interfaz de Android
que se sobreponen a
las actividades para
exigir la
con rmacin de una
accin o el ingreso
de datos.

Se caracterizan por interrumpir una tarea del usuario, alterando


el foco de la aplicacin e invitndolo de forma intrusiva a que
vea informacin, decida ante una circunstancia crtica o
especi que datos.
Por ejemplo

Puedes usar un dilogo para recordar la importancia de borrar


un elemento de la interfaz antes de continuar con la tarea.

Obtn
Tambin puedes crear un layout personalizado para el login del
Contenido
usuario al aplicativo. Exclusivo
Aprende a
programar apps
Android con tips y
recursos que solo
comparto con
lossuscriptores de
mi boletn privado

Correo

Son vitales para seleccionar una preferencia: SUSCRIBIRSE

Qu buscas?

Search

Lo Ms Popular
O incluso si deseas crear formularios para la edicin o insercin Consumir Un
de datos: Servicio Web
REST Desde
Android

Android Push
Noti cations
Con Firebase
Cloud
Messaging

Google Maps
Android Api
v2: Gua De
Mapas

Poblar
RecyclerView
Con Cursor
En Android

Cmo
Obtener La
Ubicacin De
Tus Usuarios
En Android?
Como ves, existen varios tipos de propsito para los dilogos.
Base De
As que el objetivo de este artculo es explicar cmo usar cada
Datos SQLite
uno de las categoras existentes de modo que toda situacin
En Android
quede aclarada.
Con Mltiples Tablas
Comenzaremos con el uso de la clase DialogFragment para
Admob En
instanciar los dilogos. Aunque Dialog es la clase que genera
Android:
la interfaz, DialogFragment es quien permite controlar los
Aadir
eventos de forma uida. Por ello no se recomienda crear objetos
Anuncios A
de clase base.
Una App Mvil

Luego estudiaremos la subclase AlertDialog para construir Patrn


dilogos con ttulo, cuerpo y botones de accin. Master-Detail
En Android
A travs de ella generaremos dilogos de con rmacin, dilogos
de seleccin mltiple, date picker, time pickers y dilogos
personalizados. Controles:
Tutorial De
Cada uno de los ejemplos ha sido incluido dentro de la siguiente Botones En
aplicacin: Android

Como Crear Dilogos En Android?

ContentProvider Con
Mltiples Tablas En
Android

Para descargar el proyecto en Android Studio completo, puedes


usar el siguiente botn:

Click AQU para descargar el cdigo completo.

Crear Dilogos De Alerta Con La Clase


AlertDialog En Android

Un dilogo de alerta es aquel que est diseado para mostrar un


ttulo, un mensaje o cuerpo y hasta 3 botones de con rmacin

en su zona de accin.

En los botones podremos ver acciones familiares como lo son


la aceptacin (Botn positivo) que determina que el usuario est
de acuerdo con la accin. La cancelacin (Botn negativo) para
evitar la realizacin de una accin, y la neutralidad (Botn
neutro) para determinar que an no se est listo para proseguir
o cancelar la accin.
Un dilogo de
alerta se
representa con la
clase
AlertDialog .
En su
construccin
debes usar un
elemento auxiliar llamado Builder, el cual te ayudar a de nir las
partes del dilogo con gran facilidad y sus eventos de respuesta
para los botones.

Builder te permitir fabricar las caractersticas del dilogo a


travs de mtodos set*() . Los ms frecuentes son:

setTitle() : Asigna una cadena al ttulo del dilogo.


setMessage() : Setea el mensaje que deseas transmitir en
el contenido.
setPossitiveButton() : Crea una instancia del botn de
con rmacin. El primer parmetro que recibe es el texto del
botn y el segundo una escucha OnClickListener para
determinar qu accin se tomar al ser presionado.
setNegativeButton() : Hace exactamente lo mismo que
setPossitiveButton() pero para el botn de decisin
negativa.
setNeutralButton() : Genera una escucha para el botn
neutral. Al igual que los dos mtodos anteriores, recibe el
nombre y la escucha.

Con estos mtodos ya podemos de nir un Builder que


implemente un dilogo simple con ttulo, mensaje y dos
botones

/**

* Crea un dilogo de alerta sencillo
* @return Nuevo dilogo
*/
public AlertDialog createSimpleDialog() {
AlertDialog.Builder builder = new AlertDialog
builder.setTitle("Titulo")
.setMessage("El Mensaje para el usuario"
.setPositiveButton("OK",
new DialogInterface.OnClickListener
@Override
public void onClick(DialogInterface
listener.onPossitiveButtonClick
}
})
.setNegativeButton("CANCELAR",
new DialogInterface.OnClickListener
@Override
public void onClick(DialogInterface
listener.onNegativeButtonClick
}
});

return builder.create();
}

Luego de setear las caractersticas, materializas el dilogo a


travs de create() . Puedes crear un mtodo que retorne en la
instancia ya creada para organizar tu cdigo.

Crear Un AlertDialog Con Lista


Tambin es posible crear un dilogo con una lista de elementos
que permita algn tipo de seleccin por parte del usuario. Donde
es posible crear una lista de elementos comunes, una lista de
radio buttons o una lista de checkeo mltiple.

CREAR DIALOGO CON LISTA SIMPLE


Si quieres crear una lista simple usa el mtodo setItems() en
vez de setMessage() . Este mtodo recibe un arreglo de
cadenas que permita de nir las etiquetas de los elementos y
una escucha OnClickListener para decidir que sucede

/**

* Crea un Dilogo con una lista de seleccin simple
*
* @return La instancia del dilogo
*/
public AlertDialog createSingleListDialog() {
AlertDialog.Builder builder = new AlertDialog

final CharSequence[] items = new CharSequence

items[0] = "Naranja";
items[1] = "Mango";
items[2] = "Banano";

builder.setTitle("Dilogo De Lista")
.setItems(items, new DialogInterface
@Override
public void onClick(DialogInterface
Toast.makeText(
getActivity(),
"Seleccionaste:"
Toast.LENGTH_SHORT
.show();
}
});

return builder.create();
}

Para saber que tem fue presionado consulta el parmetro


which . Este te indicar el ndice seleccionado del array.

CREAR DIALOGO CON LISTA DE RADIO BUTTONS


Ahora creemos una lista con radio buttons. Esta vez usaremos
el mtodo setSingleChoiceItems() , el cual tambin recibe
un array de caracteres, el ndice del radio seleccionado y una
escucha para el manejo de los eventos:

/**

* Crea un dilogo con una lista de radios
*
* @return Dilogo
*/
public AlertDialog createRadioListDialog() {
AlertDialog.Builder builder = new AlertDialog

final CharSequence[] items = new CharSequence

items[0] = "Soltero/a";
items[1] = "Casado/a";
items[2] = "Divorciado/a";

builder.setTitle("Estado Civil")
.setSingleChoiceItems(items, 0, new
@Override
public void onClick(DialogInterface
Toast.makeText(
getActivity(),
"Seleccionaste: "
Toast.LENGTH_SHORT
.show();
}
});

return builder.create();
}

Con ello se tendra un resultado as:



CREAR DIALOGO CON LISTA DE MLTIPLE
SELECCIN DE CHECKBOXES
La implementacin de un dilogo con checklists requiere el uso
del mtodo setMultipleChoiceItems() . Al igual que los
otros tipos de lista, este recibe un array con las etiquetas de
cada elemento y una escucha para los eventos. Adicionalmente
tiene un parmetro para indicar que checkboxes estn
seleccionados.

/**

* Crea un dilogo con una lista de checkboxes
* de seleccin multiple
*
* @return Dilogo
*/
public AlertDialog createMultipleListDialog()
AlertDialog.Builder builder = new AlertDialog

final ArrayList itemsSeleccionados = new

CharSequence[] items = new CharSequence[3

items[0] = "Desarrollo Android";


items[1] = "Diseo De Bases De Datos";
items[2] = "Pruebas Unitarias";

builder.setTitle("Intereses")
.setMultiChoiceItems(items, null,
@Override
public void onClick(DialogInterface
if (isChecked) {
// Guardar indice seleccionado
itemsSeleccionados.add
Toast.makeText(
getActivity(),
"Checks seleccionados:("
Toast.LENGTH_SHORT
.show();
} else if (itemsSeleccionados
// Remover indice sin seleccin
itemsSeleccionados.remove
}
}
});
return builder.create();
}

En este caso puedes tomar la seleccin de varias casillas. Para


contarlas usa un pequeo array para aadir aquellos que estn
marcados (esto lo sabes con el parmetro isChecked ). De lo
contrario retralos del array cuando no lo estn.

Crear un dilogo personalizado


La implementacin de un dialogo personalizado requiere la
creacin previa de un layout que ocupe el contenido del dialogo.

Normalmente puedes usar algunas de las medidas estndar de


diseo Material Design que se muestra en el apartado de
dilogos:

Como ves, el contenido se ve muy bien distribuido si usas 24dp


para el padding de contorno. Tambin se usa 20dp entre el ttulo
y el contenido.
Desde el punto de vista tcnico, se requiere que la de nicin xml
sea in ada a travs del mtodo inflate() del componente
LayoutInflater . Esto lo puede hacer al obtener una instancia
con getLayoutInflater() .

Luego seteas el view construido, con el mtodo setView() de


AlertDialog.Builder .

Por ejemplo


El siguiente layout muestra un formulario comn donde se pide
el inicio de sesin de nuestro usuario o la creacin de una
cuenta. Como ves, el contenido tiene distribucin vertical de los
campos y botones coloridos en distintas posiciones.

dialog_signin.xml
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:padding="@dimen/dialog_body">

<TextView
android:id="@+id/info_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center"
android:paddingBottom="@dimen/padding_between"
android:paddingTop="@dimen/padding_between"
android:text="@string/info_text"
android:textAppearance="?android:attr/textAppearanceSmall"

<Button
android:id="@+id/crear_boton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/info_text"
android:layout_centerHorizontal="true"
android:paddingBottom="@dimen/button_padding"
android:paddingTop="@dimen/button_padding"
android:text="@string/crear_boton"
android:textColor="@android:color/white"

<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/crear_boton"
android:layout_marginBottom="@dimen/padding_between"
android:layout_marginTop="@dimen/padding_between"
android:background="#C8C9CB" />

<EditText
android:id="@+id/nombre_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/divider"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/normal_padding"
android:background="@drawable/edit_text_border"
android:ems="10"
android:hint="@string/nombre_input"
android:inputType="textPersonName"
android:padding="@dimen/edit_text_padding"
android:textAppearance="?android:attr/textAppearanceSmall"

<EditText
android:id="@+id/contrasena_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/nombre_input"
android:layout_centerHorizontal="true"
android:layout_marginBottom="@dimen/padding_between"
android:layout_marginTop="@dimen/normal_padding"
android:background="@drawable/edit_text_border"
android:ems="10"
android:hint="@string/contrasena_input"
android:inputType="textPassword"
android:padding="@dimen/edit_text_padding"
android:textAppearance="?android:attr/textAppearanceSmall"

<CheckBox
android:id="@+id/recordar_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/contrasena_input"
android:layout_alignStart="@+id/contrasena_input"
android:layout_below="@+id/contrasena_input"
android:checked="false"
android:text="@string/recordar_check"

<TextView
android:id="@+id/olvidar_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/contrasena_input"
android:layout_alignRight="@+id/contrasena_input"
android:layout_below="@+id/recordar_check"
android:paddingTop="@dimen/padding_between"
android:text="@string/olvidar_text"
android:textAppearance="?android:attr/textAppearanceSmall"

<Button
android:id="@+id/entrar_boton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:paddingBottom="@dimen/button_padding"
android:paddingTop="@dimen/button_padding"
android:text="@string/entrar_boton"
android:textColor="@android:color/white"
</RelativeLayout>

Para aplicar este contenido sobre nuestro dilogo debemos


llevar a cabo los pasos anteriormente descritos

/**

* Crea un dilogo con personalizado para comportarse
* como formulario de login
*
* @return Dilogo
*/
public AlertDialog createLoginDialogo() {
AlertDialog.Builder builder = new AlertDialog

LayoutInflater inflater = getActivity().getLayoutInflater

View v = inflater.inflate(R.layout.dialog_signin

builder.setView(v);

Button signup = (Button) v.findViewById(R


Button signin = (Button) v.findViewById(R

signup.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// Crear Cuenta...
dismiss();
}
}
);

signin.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// Loguear...
dismiss();
}
}
);

return builder.create();
}

Un proceso sencillo. Cada botn tendr su evento


correspondiente a las acciones deseadas (crear cuenta y
loguear).

Este ejemplo no ha sido ajustado para landscape. Sin embargo,


es importante que optimices tus dilogos personalizados para
esta variacin.

Creacin De Dilogos Con La Clase


DialogFragment

DialogFragment es un fragmento que contiene un dialogo en


su layout por defecto. Usar esta clase permite mantener
optimizados los estados del dilogo, lo que permite controlar el
ciclo de vida de forma oportuna.

Si deseas soportar el uso de DialogFragment hasta la versin


1.6 (API 4) recuerda usar la librera de soporte con la siguiente
directiva:


import android.support.v4.app.DialogFragment;

Para implementarlo simplemente crea una clase y extindela de


DialogFragment . Luego sobrescribe el mtodo
onCreateDialog() para que retorne en la instancia de alguna
subclase de Dialog .

Por ejemplo

import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;

/**
* Fragmento con dilogo bsico
*/
public class SimpleDialog extends DialogFragment

public SimpleDialog() {
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState
return createSimpleDialog();
}

/**
* Crea un dilogo de alerta sencillo
* @return Nuevo dilogo
*/
public AlertDialog createSimpleDialog() {
AlertDialog.Builder builder = new AlertDialog

builder.setTitle("Titulo")
.setMessage("El Mensaje para el usuario"
.setPositiveButton("OK",
new DialogInterface.OnClickListener
@Override
public void onClick
// Acciones
}
})
.setNegativeButton("CANCELAR"
new DialogInterface.OnClickListener
@Override
public void onClick
// Acciones
}
});

return builder.create();
}
}

Pero Cmo mostrar el dilogo?

Debes crear una nueva instancia del DialogFragment en la


actividad o fragmento donde desees que se proyecte. A
continuacin llamas al mtodo show() , el cual se encarga de
mostrar el dilogo contenido en el fragmento.


// En algn lugar de tu actividad
new SimpleDialog().show(getSupportFragmentManager

show() recibe la instancia del FragmentManager y la etiqueta


descriptiva del dilogo para su identi cacin. Para conseguir el
fragment manager simplemente usa el mtodo
getSupportFragmentManager() . Si lo vas a mostrar en un
fragmento, usa solo getFragmentManager() .

Enviar Eventos Desde Un DialogFragment


Hacia Su Actividad Contenedora

Si deseas pasar los eventos que ocurren en el dilogo hacia una


actividad debes acudir a una interfaz de comunicacin que
permita compartir los mtodos de accin.

A continuacin te dejo los pasos a seguir:

Paso #1: Declara una interfaz dentro del DialogFragment . La


declaracin de la interfaz debe tener de nido un mtodo por
cada accin que reciba el dilogo.

Si deseas procesar en la actividad los mtodos del botn


positivo y el negativo, entonces creas una interfaz con dos
mtodos respectivos:
public interface OnSimpleDialogListener {

void onPossitiveButtonClick();// Eventos Botn Positivo
void onNegativeButtonClick();// Eventos Botn Negativo
}

Paso #2: Declarar un atributo del tipo de la interfaz para


conseguir la instancia directa de la actividad.


// Interfaz de comunicacin
OnSimpleDialogListener listener;

Paso #3: Comprobar que la actividad ha implementado la


interfaz podemos usar el mtodo onAttach() . Recuerda que
este recibe la instancia de la actividad contenedora del
fragmento. Simplemente asignas la actividad a la instancia de la
interfaz.

Si este proceso no es posible, entonces lanzas una excepcin


del tipo ClassCastException .


@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

try {
listener = (OnSimpleDialogListener) activity

} catch (ClassCastException e) {
throw new ClassCastException(
activity.toString() +
" no implement OnSimpleDialogListener"

}
}
Paso #4: Invocar los mtodos de la interfaz en las secciones del
dilogo donde deseamos implicar a la actividad.

.setPositiveButton("OK",

new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface
listener.onPossitiveButtonClick
}
})
.setNegativeButton("CANCELAR",
new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface
listener.onNegativeButtonClick
}
});

Paso #5: Implementar sobre la actividad contenedora, la


interfaz declarada en el fragmento.

public class MainActivity extends AppCompatActivity



OnSimpleDialogListener{

//...
}

Paso #6: Sobrescribir dentro de la actividad los mtodos de la


interfaz, con las acciones que requieras.


@Override
public void onPossitiveButtonClick() {
// Acciones
}

@Override
public void onNegativeButtonClick() {
// Acciones
}

Cmo Comunicar Un DialogFragment


Con Un Fragment?

Una de las formas para comunicar un fragmento de dilogo y un


fragmento comn, es tomar la actividad contenedora como
puente entre ambos. Es decir, enviar los eventos desde el
DialogFragment hacia la actividad y luego desde la actividad
hacia el Fragment .

Esta convencin es recomendada, ya que en la documentacin


o cial de Android Developers se menciona que no se deben
comunicar dos fragmentos directamente. Quizs porque las
esperanzas de vida de los fragmentos pueden variar, as que es
mejor asegurar su independencia de transmisin.

Veamos este ejemplo para entender mejor

Supn que tienes un fragmento sencillo con un text view y un


botn. La idea es que al presionar el botn, se despliegue el
dilogo de lista simple que hemos construido con anterioridad.

Y una vez seleccionada la opcin, se actualizar el texto a travs


de la actividad.

Lo primero es crear un DialogFragment que tenga tres


opciones. Para este ejemplo usar el mensaje Qu fruta te
gusta ms? y aadir tres opciones: Naranja, Mango y
Banano:


import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;

/**
* Fragmento con dilogo de lista simple
*/
public class SimpleListDialog extends DialogFragment

public interface OnSetTitleListener{


void setTitle(String title);
}

OnSetTitleListener listener;

public SimpleListDialog() {
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState
return createSingleListDialog();
}

/**
* Crea un Dilogo con una lista de seleccin simple
*
* @return La instancia del dilogo
*/
public AlertDialog createSingleListDialog
AlertDialog.Builder builder = new AlertDialog

final CharSequence[] items = new CharSequence

items[0] = "Naranja";
items[1] = "Mango";
items[2] = "Banano";

builder.setTitle("Qu fruta te gusta ms?"


.setItems(items, new DialogInterface
@Override
public void onClick(DialogInterface
listener.setTitle((String
}
});

return builder.create();
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

try {
listener = (OnSetTitleListener) activity

} catch (ClassCastException e) {
throw new ClassCastException(
activity.toString() +
" no implement OnSetTitleListener"

}
}

Como ves, la escucha de comunicacin onSetTitleListener


provee un mtodo llamado setTitle() para gestionar la
seleccin del usuario. Justo en el momento que el usuario
presiona (mtodo onClick() ), se enva hacia la actividad la
cadena contenida en items[which] .

Ahora en la actividad principal, se implementar la interfaz y se


sobrescribir el mtodo de implementacin:

public class MainActivity extends AppCompatActivity



SimpleListDialog.OnSetTitleListener {
// Dentro de una actividad...
@Override
public void setTitle(String title) {
FragmentoObjetivo fragment =
getSupportFragmentManager().findFragmentByTag

if(fragment!=null){
fragment.setTitle(title);
}else{
// Reporta el error...
}
}
}
Al recibir el evento, debes llamar a la instancia del fragmento al
que necesitas pasar los resultados. Para ello llamas al
administrador de fragmentos y usas el mtodo
findFragmentById() o findFragmentByTag() .

El primero obtiene la instancia del fragmento con el id pasado


como parmetro y el segundo obtiene el fragmento que
contiene la etiqueta especi cada.

Con eso ya puedes llamar el mtodo hipottico setTitle()


del fragmento y comunicar la fruta preferida del usuario en el
text view.

Crear Un Dilogo Con DatePicker

Un DatePicker o selector de fecha es un view elaborado para


permitir al usuario seleccionar una fecha con gurable. Donde
puede elegir el ao, el mes y el da respectivamente.

Normalmente se puede setear de forma esttica sobre un


layout. Si deseas encontrarlo en Android Studio, ve a la pestaa
de diseo, luego a la paleta y selecciona DatePicker en la
categora Date & Time:
Pero nuestro objetivo no es usarlo de esa forma. Lo que
necesitamos es crear un dilogo que se sobreponga ante el
layout para no consumir espacio.

Esto se logra a travs de la subclase DatePickerDialog , la


cual representa un dilogo con un selector de fechas en su
interior.

Al igual que como hemos hecho hasta ahora con los dems
dilogos, creamos un DialogFragment para que actu como
envoltura. Para
ello se retorna en una instancia de
DatePickerDialog en el mtodo onCreateDialog() .

DateDialog.java

import android.annotation.TargetApi;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;

import java.util.Calendar;

/**
* Fragmento con un dilogo de eleccin de fechas
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class DateDialog extends DialogFragment

@Override
public Dialog onCreateDialog(Bundle savedInstanceState
// Obtener fecha actual
final Calendar c = Calendar.getInstance
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH

// Retornar en nueva instancia del dialogo selector de fecha


return new DatePickerDialog(
getActivity(),
(DatePickerDialog.OnDateSetListener
year,
month,
day);
}

Para la construccin solo se requiere aadir la fecha por defecto


con que se mostrar el dilogo. La clase Calendar puede
ayudarte a obtener la fecha actual por si deseas usarla.

Ahora, si quieres leer los eventos de seleccin de fecha, usa la


interfaz DatePickerDialog.onDateSetListener sobre la
actividad contenedora. Esta provee el mtodo callback
onDateSet() para la determinar las acciones que se realizarn
con la fecha seleccionada.

Con ello puedes sobrescribir el mtodo en tu actividad y realizar


la accin que desees. En el siguiente ejemplo despliego la fecha
elegida en un Toast :


@Override
public void onDateSet(DatePicker view, int year
Toast.makeText(
this,
"Fecha: " + year + "-" + monthOfYear
Toast.LENGTH_LONG)
.show();

}
Crear Dilogo Con Un TimePicker En Su
Interior

El TimePicker o selector de tiempo es muy similar al


DatePicker . Este permite seleccionar el tiempo a travs de
una con guracin de las horas y minutos.

Si deseas aadirlo a travs del editor de Android Studio debes


dirigirte a la paleta, encontrar la categora Date & Time y luego
arrastrar el objeto TimePicker:

Ahora, para aadirlo a un dilogo haremos el mismo


procedimiento anterior. Usaremos la clase anloga
TimePickerDialog con un DialogFragment .

TimeDialog.java

import android.annotation.TargetApi;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.format.DateFormat;

import java.util.Calendar;

/**
* Fragmento con un dilogo de eleccin de tiempos
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class TimeDialog extends DialogFragment

@Override
public Dialog onCreateDialog(Bundle savedInstanceState
// Iniciar con el tiempo actual
final Calendar c = Calendar.getInstance
int hour = c.get(Calendar.HOUR_OF_DAY
int minute = c.get(Calendar.MINUTE);

// Retornar en nueva instancia del dialogo selector de tiempo


return new TimePickerDialog(
getActivity(),
(TimePickerDialog.OnTimeSetListener
hour,
minute,
DateFormat.is24HourFormat(getActivity
}

El TimePickerDialog se construye con el tiempo actual


detectado con ayuda de la clase Calendar . Donde su

constructor recibe los siguientes parmetros:

context : Es el contexto donde se relacionar el dilogo.


En este caso llamamos a la actividad contenedora con
getActivity().
callBack : Es la interfaz por la cual se comunicar el
dilogo. En este caso pusimos la actividad contenedora, ya
que esta implementar la interfaz OnTimeSetListener .
hourOfDay : La hora inicial.
minute : Los minutos iniciales.
is24HourView : Determina si el time picker tendr un
formato de 24 horas o AM/PM. Para esto se obtuvo las
preferencias del usuario del tiempo con el mtodo
is24HourFormat() de la clase DateFormat .

El paso a seguir es implementar la interfaz


OnTimeSetListener en tu actividad principal para sobrescribir
las acciones del mtodo de accin onTimeSet() .


@Override
public void onTimeSet(TimePicker view, int hourOfDay
Toast.makeText(
this,
"Tiempo: " + hourOfDay + ":" + minute
Toast.LENGTH_LONG)
.show();
}

Dilogos En Pantalla Completa O Full


Screen

El uso de dilogos en pantalla completa se puede dar cuando el


dilogo contiene varios elementos agrupados que requieren
ms espacio. O en los procesos de insercin o edicin de datos
siempre y cuando no se requiera guardar los datos en tiempo
real.

Tambin pueden usarse en situaciones donde el tamao de la
pantalla in uye. Es decir, para tamaos pequeos podra
mostrarse el dilogo en pantalla completa y para tamaos
grandes se desplegara normalmente.

Lo curioso es que al crear un dilogo en pantalla completa, no


podemos usar la clase AlertDialog junto a Builder , debido
a que el DialogFragment ser embebido a travs de una
transaccin de fragmentos como se hace normalmente.

Esto signi ca que el mtodo onCreateDialog() no ser


sobrescrito, por lo que debemos acudir a onCreateView()
para in ar un layout por completo.

As que puedes deducir que las reas de ttulo, contenido y


accin no estn distribuidas de la misma forma. Esta vez los
botones de con rmacin y el ttulo van en la action bar; y el
contenido ser ubicado en todo el espacio de trabajo.

El siguiente ejemplo extrado de la gua de Material Design para


diseo de dilogos full screen, muestra cmo se vera este
elemento:

Si lees un poco, nos indican que debemos ubicar la accin de


con rmacin como action button con un verbo descriptivo
como Guardar, Crear, Enviar, etc. En caso de la accin
negativa, se usa el cono de cerrar como Up Button.

Ejemplo de un fragmento full screen


Supn que deseas aadir una nueva cita de ventas a tu
aplicacin gestora de vendedores y has decidido usar un
fragmento en pantalla completa para ello.
Sabes que necesitas el nombre del lead, el producto en que est
interesado, la fecha en que se acord la reunin, la prioridad y
una seccin para describir alguna situacin especial.

Para ello creas el siguiente layout:

fullscreen_dialog.xml

<?xml version="1.0" encoding="utf-8"?>


<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="@dimen/activity_horizontal_margin"

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:paddingTop="@dimen/edit_text_padding"
android:text="@string/cliente_label"
android:textAppearance="?android:attr/textAppearanceSmall"

<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/textView"
android:entries="@array/clientes"

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/spinner"
android:paddingTop="@dimen/edit_text_padding"
android:text="@string/producto_label"
android:textAppearance="?android:attr/textAppearanceSmall"

<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/textView2"
android:entries="@array/productos"

<TextView
android:id="@+id/fecha_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/spinner2"
android:paddingTop="@dimen/edit_text_padding"
android:text="@string/fecha_label"
android:textAppearance="?android:attr/textAppearanceSmall"

<View
android:id="@+id/centro"
android:layout_width="1dp"
android:layout_height="1dp"
android:layout_centerInParent="true"
android:background="@null" />

<TextView
android:id="@+id/prioridad_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/fecha_text"
android:paddingTop="@dimen/edit_text_padding"
android:text="@string/prioridad_label"
android:textAppearance="?android:attr/textAppearanceSmall"

<Spinner
android:id="@+id/spinner5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/prioridad_text"
android:entries="@array/prioridades"

<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/spinner5"
android:paddingTop="@dimen/edit_text_padding"
android:text="@string/notas_label"
android:textAppearance="?android:attr/textAppearanceSmall"

<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/textView5"
android:hint="@string/notas_hint"
android:textAppearance="?android:attr/textAppearanceSmall"

<TextView
android:id="@+id/fecha_text"
style="@android:style/Widget.DeviceDefault
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/fecha_label"
android:layout_marginRight="@dimen/normal_padding"
android:layout_toLeftOf="@+id/hora_text"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"

<TextView
android:id="@+id/hora_text"
style="@android:style/Widget.DeviceDefault
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/fecha_label"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"

</RelativeLayout>
</ScrollView>

Para proseguir con ese diseo, simplemente debes crear un


nuevo fragmento que extienda de DialogFragment y
sobrescribes el mtodo onCreateView() para in arlo.

FullScreenDialog.java

import android.os.Bundle;

import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.herprogramacion.dialogpers.R;

import java.text.SimpleDateFormat;
import java.util.Calendar;
public class FullScreenDialog extends DialogFragment

private TextView textFecha;


private TextView textTiempo;
public FullScreenDialog() {
// Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);

// Obtener instancia de la action bar


ActionBar actionBar = ((AppCompatActivity
.getSupportActionBar();

if (actionBar != null) {
// Habilitar el Up Button
actionBar.setDisplayHomeAsUpEnabled
// Cambiar icono del Up Button
actionBar.setHomeAsUpIndicator(R.
}
}

@Override
public View onCreateView(LayoutInflater inflater
Bundle savedInstanceState
View view = inflater.inflate(R.layout
iniciarHora(view);// Setear hora inicial
iniciarFecha(view);// Setear fecha inicial
return view;
}

private void iniciarHora(View view) {


textTiempo = (TextView) view.findViewById
Calendar c = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat
textTiempo.setText(format.format(c.getTime

textTiempo.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v
new TimeDialog().show
}
}
);
}

private void iniciarFecha(View view) {


textFecha = (TextView) view.findViewById
Calendar c = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat
textFecha.setText(format.format(c.getTime

textFecha.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v
new DateDialog().show
}
}
);
}

@Override
public void onCreateOptionsMenu(Menu menu
inflater.inflate(R.menu.fullscreen_dialog
}

@Override
public boolean onOptionsItemSelected(MenuItem
int id = item.getItemId();

switch (id) {
case android.R.id.home:
// procesarDescartar()
break;
case R.id.action_save:
// procesarGuardar()
break;
}

return super.onOptionsItemSelected(item
}

/**
* Actualiza la fecha del view {@code fecha_text}
* @param year Nuevo Ao
* @param monthOfYear Nuevo Mes
* @param dayOfMonth Nuevo da
*/
public void setDateView(int year, int monthOfYear
Calendar c = Calendar.getInstance();
c.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat format = new SimpleDateFormat
textFecha.setText(format.format(c.getTime
}

/**
* Actualiza la hora del view {@code hora_text}
* @param hourOfDay Nueva Hora
* @param minute Nuevos Minutos
*/
public void setTimeView(int hourOfDay, int
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR, hourOfDay);
c.set(Calendar.MINUTE, minute);
SimpleDateFormat format = new SimpleDateFormat
textTiempo.setText(format.format(c.getTime
}
}

El estilo de la fecha y el tiempo puedes modi carlo a travs de la


clase SimpleDateFormat, la cual provee el mtodo format()
para transformar informacin con respecto a un patrn.

Otra aspecto importante es la creacin de un DateDialog y un


TimeDialog al momento de pulsar los text views de fecha y
tiempo. Lo que quiere decir que se espera que la actividad
implemente las escuchas para la transferencia de los datos.

Ahora debes insertarlo en la actividad donde te encuentras. Lo


que requiereuna transaccin simple de fragmentos.

DetailActivity.java

import android.app.DatePickerDialog;

import android.app.TimePickerDialog;

import android.os.Bundle;
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentTransaction
import android.support.v7.app.AppCompatActivity
import android.widget.DatePicker;
import android.widget.TimePicker;

import com.herprogramacion.dialogpers.R;
import com.herprogramacion.dialogpers.dialogos
public class DetailActivity extends AppCompatActivity
DatePickerDialog.OnDateSetListener,
TimePickerDialog.OnTimeSetListener {

@Override
protected void onCreate(Bundle savedInstanceState
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail
if (savedInstanceState == null) {
crearFullScreenDialog();
}
}

private void crearFullScreenDialog() {


FragmentManager fragmentManager = getSupportFragmentManager
FullScreenDialog newFragment = new FullScreenDialog

FragmentTransaction transaction = fragmentManager


transaction.setTransition(FragmentTransaction
transaction.add(android.R.id.content,
.commit();
}

@Override
public void onDateSet(DatePicker view, int

FullScreenDialog fragment = (FullScreenDialog


if (fragment != null) {
fragment.setDateView(year, monthOfYear
}
}

@Override
public void onTimeSet(TimePicker view, int
FullScreenDialog fragment = (FullScreenDialog
if (fragment != null) {
fragment.setTimeView(hourOfDay, minute
}
}
}

Los mtodos onDateSet() y onTimeSet() de las interfaces


de los pickers acceden directamente al dialogo
FullScreenDialog para comunicar los datos. Si observaste
bien, setDateView() y setTimeView() son los mtodos
encargados de recibir los datos de las interfaces de
comunicacin.

Por ltimoprogramamos lasacciones de la action bar. Crea un


nuevo men llamado fullscreen_dialog.xml y asgnale un action
button para guardar:

fullscreen_dialog.xml


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
<item android:id="@+id/action_save" android:title
android:orderInCategory="1" app:showAsAction
</menu>

Si analizas elfragmento FullScreenFragment , este contribuye


a la action bar con onHasOptionsMenu() dentro de
onCreate() . Por esa razn se in a el men en
onCreateOptionsMenu() .

El cono de cerrar se implement al obtener la action bar en


onCreateView() para cambiar el icono del up button con el
mtodo setHomeAsUpIndicator() . El drawable puedes
encontrarlo al descargar el proyecto.

Recuerda que si necesitas implementar acciones de


con rmacin y descarte, tienes el mtodo
onOptionsItemSelected() . Donde android.R.id.home
permite para tomar el evento del up button.

Manejar Eventos De Descarte Y


Cancelacin De Un Dilogo
Afortunadamente los fragmentos son descartados en el
momento que sus botones de accin son presionados o incluso
si el usuario presiona por fuera de su contenido. Pero en
ocasiones muy extremas tal vez requieras cerrar el dilogo
manualmente.

Y esto es tan sencillo como usar el mtodo dismiss() dentro


de DialogFragment . Adicionalmente puedes realizar acciones
en ese instante con el mtodo onDismiss() .


// Dentro de un DialogFragment...
@Override
public void onDismiss(DialogInterface dialog)
// Tus acciones
}

Por otro lado el dilogo puede ser cancelado sin aplicar los
cambios a travs de cancel() . Para procesar su
comportamiento puedes usar onCancel() , el cual es invocado
si el usuario presiona el Back Button, si es presionado el botn
negativo o si se presiona por fuera del dilogo.

// Dentro de un DialogFragment...

@Override
public void onCancel(DialogInterface dialog)
// Tus acciones
}

Conclusiones

Asegrate de usar dilogos cuando desees que el usuario


decida ante una situacin de con rmacin o cuando sea
necesario el ingreso de datos necesarios para el
procesamiento de una accin.
La clase DialogFragment permite la relacin de los
dilogos con los eventos de un fragmento. Esto reduce la
complejidad de interacciones con la actividad.
Asegrate de seguir los patrones de diseo y las medidas
establecidas por Google para mantener una excelente
experiencia de usuario en tu aplicacin.
Es importante mantener el diseo de tus dilogos
personalizados adaptable a diferentes tipos de pantallas y
orientaciones. Esto maximizar la experiencia de usuario en
tu app.

Icono de la aplicacin

Artculos Relacionados
Tabs En La Action Tutorial Sobre La Tutorial
Bar Con Swipe Action Bar En RecyclerView Con
Views En Android Android Studio Cursor En Android

Crear Swipe Views Tutorial Sobre La Poblar


En Android Con Action Bar En RecyclerView Con
Tabs En La Action Android Cursor En Android
Bar

NavigationDrawer CheckBox en RadioButton en


En Android: Android Android
Navigation Drawer
En Material Design CheckBox: RadioButton En
Controles En Android: Controles
NavigationView: Android De Entrada
Navigation Drawer
Con Material
Design

Comentarios Comunidad
1 Login

ordenar por el mejor


Recomendar 2 Share

nete a la discusin...
Daniel Cabanillas Purihuaman hace 18 das
Hola James, una pregunta, como se puede mostrar un
ProgressDialog Sobre un DiaalogFragment?
Estoy usando un DialogFragment como formulario y un
ProgressDialog que se muestra al guardar los datos del
dialog, pero el ProgressDialog siempre se muestra por
debajo del DialogFragment.

Saludos.
1 Reply Share

Juan Carlos Jirn hace un mes


Esto es excelente James muchas gracias, sos el mejor!!
1 Reply Share

James Revelo Urrea Moder. > Juan Carlos Jirn


hace un mes
Con gusto Juan :D
Reply Share

David Minaya hace 2 meses


hola James.

hay manera de descargar los proyectos de los cuadros


de dialogos que presentas en este post?
1 Reply Share

James Revelo Urrea Moder. > David Minaya


hace 2 meses
Hola David, usa la caja amarilla para descargar el
cdigo
Reply Share

omar ACy hace 5 meses


Muchsimas gracias, me sirvi mucho tu post

1 Reply Share

James Revelo Urrea Moder. > omar ACy


hace 5 meses
Con gusto Omar!
Reply Share

MarciAlice RamRom hace 10 das


Hola James, como sustituyes los mtodos deprecados
onAttach(Activity)?
Reply Share

Daniel Cabanillas Purihuaman hace 18 das


Estan muy entendibles y buenas tus explicaciones, pero
tengo una pregunta, como puedo mostrar un
ProgressDialog Sobre un DialogFragment?, he intentado
de todo pero siempre el progressDialog se muestra por
debajo del DialogFragment, Saludos.
Reply Share

Jacsel Agramonte hace 3 meses


Hola James, geniales como siempre tus Tutoriales...
Tengo una duda, quiero que el dialogo personalizado
tenga bordes.. ? como pudiera lograrlo ?
He intentado modicando el background del layout del
Dialogo, pero siempre queda debajo otro en fondo
blanco....

Saludos Jacsel...!!!
Reply Share

Alex hace 5 meses


Como puedo actualizar un fragment al cerrar un dialogo?
Mediante el dialogo introduzco un nuevo elemento y
quiero que se refresque el fragment para mostrarlo en el
recycleview.
Un saludo y muchisimas gracias de antemano!
Reply Share

Enmanuel hace 8 meses


Buenas tardes james , estoy aprendiendo a utilizar los
DialogFragment pero me he encontrado con algo que no
se como resolverlo , en mi ejemplo estoy utilizando 2
DialogFragment el primero que llama, es para llenar
algunas casilla ya sea [nombre, apellido..] , y el segundo
es para mostrar la datos que he llenado desde el primer
DialogFragment .Como puedo actualizar el segundo

DialogFragment desde el primero o pasar los parametros
donde yo puede actualizar el listview. .

gracias
Reply Share

Gabriel hace 9 meses


Hola muy bueno el post, la verdad te felicito, Lo que
quiero saber es como mandar los datos agregados en el
dialog hacia la activity que lo llama, Mi idea era tener un
objeto personalizado y almacenar ahi los valores
introducidos en varios editText en el dialog.
Muchas gracias
Reply Share

Mario German Agudelo hace 10 meses


Hola James, que buena explicacin.

Tengo la siguientes preguntas:

1. Al Crear dialogo con lista de una seleccin de


checkboxes indicas que debo colocar el siguiente
cdigo:

AlertDialog.Builder builder = new


AlertDialog.Builder(getActivity());

Pero al colocar el getActivity me sale un error, que crees


que pueda ser el error.

2. Quisiera que esta ventana de dialogo al seleccionar


una de las opciones me enviar a otra ventana, es decir
cada opcin me enviara a diferentes ventanas, como
puedo hacer eso.

agradezco toda la ayuda que me puedas brindar.

Gracias.
Reply Share

Miquel ngel Bardaj hace 10 meses


Hola el

FragmentoObjetivo, que pones a mitad de ejercicio, que


es, porque no lo encuentro en cdigo y no lo tengo claro.
ES una clase especial o que seria.
Gracias por adelantado
Reply Share
James Revelo Urrea Moder. > Miquel ngel
Bardaj hace 10 meses
Hola Miquel. El nombre es solo un ejemplo para
representar que ese fragmento ser el objetivo de
las escuchas
Reply Share

Miquel ngel Bardaj hace 10 meses


hola, no se puede bajar el codigo completo aunque le
hola, no se puede bajar el codigo completo aunque le
hayas dado al like. Da un 404
Reply Share

Wilson F Lemus Montaa hace un ao


Ayuda. Estoy tratando de hacer el dialogo de la fecha,
pero no me funciona. Preunta. La case DATEDIALOG.java
desde donde la llamo y como realizo el llamado? Gracias
Reply Share

Leo HR hace un ao
Hola James, saludos, disculpa ... como podra mostrar un
progressBar Circular indeterminado como un Dialog.
Podras ayudarme? de antemano gracias :)
Reply Share

Leo HR hace un ao
Hola James saludos, disculpa...

En una app cliente que estoy haciendo, la idea es que


haga 3 intentos por encontrar el servicio en un servidor, y
de NO ENCONTRARLO mandar un Toast o un Dialog
diciendo obviemente que no lo encontr, y si SI LO
ENCONTR que me arroje un mensaje de ... no se ....
"Conectado"...por decir algo....

como puedo mostrar un Toast o un Dialog en una clase


donde est el mtodo que realiza o trata de realizar la
conexin?

Lo que sucede es que no me reconoce el Toast (marca


error en toda la sentencia) y si intento llamar o inar un
Dialog me marca error en la instruccin
getFragmentManager()

De antemano muchas gracias James, saludos a todos


Reply Share

Leo HR > Leo HR hace un ao
Hola James, ya encontr una forma de hacerlo :) ,
Gracias
Reply Share

German hace un ao
Una Consulta James , como puedo hacer para cargar una
lista en un AlertDialog haciendo una peticion get hacia
una url que me trae un json , con Volley, que me
recomendas ??
Reply Share

James Revelo Urrea Moder. > German


hace un ao
Mm se me ocurre que si la lista de valores no
variar con mucha frecuencia en el tiempo,
entonces descarga esos elementos y almacnalos
en una base de datos sqlite o en un
sharedpreferences.

Si la lista es dinmica dependiendo del servidor,


entonces realiza la consulta en tiempo real al
momento de cargar el dilogo.
Reply Share

German > James Revelo Urrea


hace un ao
la lista es dinamica , y traigo los datos y el
parseo del json como en tu tutorial de
Volley.Hasta ahi todo ok, los datos los trae
bien pero no me los carga en el AlertDialog
en la lista, tengo que hacer la peticion en el
onCreateDialog ?? o en un AsycnTask ?? o
en que metodo del DialogFragment??
gracias por la ayuda
Reply Share

german > German hace un ao


ya lo resolvi con un progressDialog ,
dentro de el hago la peticin con
volley y luego lanzo el alertDialog
con la lista
Reply Share

Alberto hace un ao
Hola James
Antes de nada, muchas gracias por estos tutoriales, me
estn sirviendo de mucho

Tengo una pregunta que hacerte como se puede


recuperar el valor del EditText en un DialogFragment?

por ejemplo, en el caso de la pantalla del tutorial "Dialogo


personalizado", intento recuperar el campo contrasea,
pero me da un error de apliacin
String clave =
((EditText)v.ndViewById(R.id.contrasena_input)).getText().toString();

Sabes de que puede ser?

un saludo

muchas gracias
Reply Share

James Revelo Urrea Moder. > Alberto


hace un ao
Hola Alberto. Que error te sale en el logcat?
puedes pegar un pantallazo?
Reply Share

Alberto > James Revelo Urrea


hace un ao
Claro!!! me sale este error


Reply Share

James Revelo Urrea Moder. >


Alberto hace un ao
Muestrame el mtodo que usas
para controlar los eventos de click.

De seguro puedes buscar obtener el


dialogo actual con getDialog(). El
resultado de este mtodo es una
instancia del tipo Dialog la cual te
permitir encontrar el view con
ndViewById().
Reply Share

fernanda hace un ao
hola, disculpen por que me marca error en getActivity(),
en todos no solo en uno que puedo hacer
Reply Share

James Revelo Urrea Moder. > fernanda


hace un ao
Hola Fernanda.

Qu error te sale en el logcat?, podras enviar un


Qu error te sale en el logcat?, podras enviar un
pantallazo?
Reply Share

Fipal hace un ao
Hola gracias por tus tutoriales, podras ayudarme con un
problema pasa quq cuando ejecuto el FullScreen desde
un button oat no me aparece el actionbar y realmente no
se si se debe agregar algo mas a lo que explicas en el
tutorial.

Gracias
Reply Share

James Revelo Urrea Moder. > Fipal hace un ao


Hola Fipal. Como ests aadiendo el oating
button? Con una librera de terceros? o con la
librera ocial de diseo de google?
Reply Share

Fipal > James Revelo Urrea hace un ao


Hola, gracias por responder, estoy
utilizando esta librera
compile
'com.oguzdev:CircularFloatingActionMenu:1.0.2'
que es de terceros que encontr en un
tutorial https://github.com/oguzbilgene...,
aunque prob con un botn normal y
continua sin mostrar el actionBar.

Gracias.
Reply Share

James Revelo Urrea Moder. >


Fipal hace un ao
Qu estilos ests usando en tu
aplicacin Fipal?
Reply Share

Fipal > James Revelo Urrea


hace un ao
Este es mi archivo de estilos, no se
si te reeres a esto lo que si
comprob es que el layout al
inarse tapa el actionBar que se
declara en el onCreate() ese es el
problema, no se porque lo tapa,
Muchas gracias por tu ayuda.


Reply Share

James Revelo Urrea Moder. >


Fipal hace un ao
Bueno, lo que veo es que ests
usando el estilo NoActionBar.

Ests usando el componente


<toolbar> en tus layouts?
Reply Share

Fipal > James Revelo Urrea


hace un ao
Si, estoy utilizando toolbar y al
cambiar el NoActionBar se me des-
congura lo dems que tengo .
Reply Share

James Revelo Urrea Moder. >


Fipal hace un ao
Compaero, de seguro es el
posicionamiento del Toolbar o los
estilos. Ya que este tutorial sigue
usando la action bar antigua.

puedes mostrarme la forma en que


queda descongurado con un
pantallazo?
Reply Share

Fipal > James Revelo Urrea


hace un ao

Gracias ya lo solucione con Toolbar,
muy amable. Te que quiero hacer
una consulta, en los oatbutton
propios de google se puede hacer
subbutton? sin necesidad de
librerias de terceros, gracias. como
se ve en la imagen, Gracias



Reply Share

James Revelo Urrea Moder. >


Fipal hace un ao
Claro amigo. Solo que requiere la
sobrescritura de algunas
caracteristicas y el uso de

Hermosa Programacin: +50 Tutoriales Desarrollo Android Copyright 2016.

Vous aimerez peut-être aussi