Android
Diálogo
Buscar..
Parámetros
Línea | Descripción |
---|---|
espectáculo(); | Muestra el dialogo |
setContentView (R.layout.yourlayout); | establece el ContentView del diálogo a su diseño personalizado. |
despedir() | Cierra el dialogo |
Observaciones
El diálogo en el primer ejemplo (Diálogo) no necesita llamar a
show()
cuando se crea como se maneja en el constructorLos diálogos de alerta deben construirse a través de una nueva instancia de la clase
AlertDialog.Builder()
. Siguiendo el patrón del generador, todos los miembros de AlertDialog.Builder pueden ser encadenados en un método para "construir" la instancia de diálogo.El constructor del cuadro de diálogo de alerta puede
show()
directamenteshow()
el cuadro de diálogo; no es necesario llamar acreate()
luego ashow()
en la instancia de AlertDialog
Diálogo de alerta
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
MainActivity.this);
alertDialogBuilder.setTitle("Title Dialog");
alertDialogBuilder
.setMessage("Message Dialog")
.setCancelable(true)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
// Handle Positive Button
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
// Handle Negative Button
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
Un diálogo de alerta básica
AlertDialog.Builder builder = new AlertDialog.Builder(context);
//Set Title
builder.setTitle("Reset...")
//Set Message
.setMessage("Are you sure?")
//Set the icon of the dialog
.setIcon(drawable)
//Set the positive button, in this case, OK, which will dismiss the dialog and do everything in the onClick method
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// Reset
}
});
AlertDialog dialog = builder.create();
//Now, any time you can call on:
dialog.show();
//So you can show the dialog.
Ahora este código logrará esto:
( Fuente de la imagen: WikiHow )
Selector de fecha dentro de DialogFragment
xml del diálogo:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<DatePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/datePicker"
android:layout_gravity="center_horizontal"
android:calendarViewShown="false"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ACCEPT"
android:id="@+id/buttonAccept" />
</LinearLayout>
Clase de diálogo:
public class ChooseDate extends DialogFragment implements View.OnClickListener {
private DatePicker datePicker;
private Button acceptButton;
private boolean isDateSetted = false;
private int year;
private int month;
private int day;
private DateListener listener;
public interface DateListener {
onDateSelected(int year, int month, int day);
}
public ChooseDate(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.dialog_year_picker, container);
getDialog().setTitle(getResources().getString("TITLE"));
datePicker = (DatePicker) rootView.findViewById(R.id.datePicker);
acceptButton = (Button) rootView.findViewById(R.id.buttonAccept);
acceptButton.setOnClickListener(this);
if (isDateSetted) {
datePicker.updateDate(year, month, day);
}
return rootView;
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.buttonAccept:
int year = datePicker.getYear();
int month = datePicker.getMonth() + 1; // months start in 0
int day = datePicker.getDayOfMonth();
listener.onDateSelected(year, month, day);
break;
}
this.dismiss();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
listener = (DateListener) context;
}
public void setDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
this.isDateSetted = true;
}
}
Actividad llamando al diálogo:
public class MainActivity extends AppCompatActivity implements ChooseDate.DateListener{
private int year;
private int month;
private int day;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
private void showDateDialog();
}
private void showDateDialog(){
ChooseDate pickDialog = new ChooseDate();
// We could set a date
// pickDialog.setDate(23, 10, 2016);
pickDialog.show(getFragmentManager(), "");
}
@Override
onDateSelected(int year, int month, int day){
this.day = day;
this.month = month;
this.year = year;
}
}
DatePickerDialog
DatePickerDialog
es la forma más sencilla de usar DatePicker
, ya que puede mostrar el diálogo en cualquier lugar de su aplicación. No tienes que implementar tu propio diseño con el widget DatePicker
.
Cómo mostrar el diálogo:
DatePickerDialog datePickerDialog = new DatePickerDialog(context, listener, year, month, day);
datePickerDialog.show();
Puede obtener el widget DataPicker
desde el cuadro de diálogo de arriba, para obtener acceso a más funciones y, por ejemplo, establecer la fecha mínima en milisegundos:
DatePicker datePicker = datePickerDialog.getDatePicker();
datePicker.setMinDate(System.currentTimeMillis());
Selector de fechas
DatePicker
permite al usuario elegir la fecha. Cuando creamos una nueva instancia de DatePicker
, podemos establecer la fecha inicial. Si no establecemos la fecha inicial, la fecha actual se establecerá de forma predeterminada.
Podemos mostrar DatePicker
al usuario utilizando DatePickerDialog
o creando nuestro propio diseño con el widget DatePicker
.
También podemos limitar el rango de fechas, que el usuario puede elegir.
Estableciendo la fecha mínima en milisegundos.
//In this case user can pick date only from future
datePicker.setMinDate(System.currentTimeMillis());
Al establecer la fecha máxima en milisegundos
//In this case user can pick date only, before following week.
datePicker.setMaxDate(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(7));
Para recibir información, sobre qué fecha fue seleccionada por el usuario, tenemos que usar Listener
.
Si estamos utilizando DatePickerDialog
, podemos establecer OnDateSetListener
en el constructor cuando estamos creando una nueva instancia de DatePickerDialog
:
Ejemplo de uso de DatePickerDialog
public class SampleActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
private void showDatePicker() {
//We need calendar to set current date as initial date in DatePickerDialog.
Calendar calendar = new GregorianCalendar(Locale.getDefault());
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(this, this, year, month, day);
datePickerDialog.show();
}
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
}
}
De lo contrario, si estamos creando nuestro propio diseño con el widget DatePicker
, también tenemos que crear nuestro propio oyente como se muestra en otro ejemplo.
Adición de Material Design AlertDialog a su aplicación usando Appcompat
AlertDialog
es una subclase de Dialog
que puede mostrar uno, dos o tres botones. Si solo desea mostrar una cadena en este cuadro de diálogo, use el método setMessage()
.
El paquete AlertDialog
de android.app
muestra de manera diferente en diferentes versiones del sistema operativo Android.
La biblioteca de aplicaciones de Android V7 proporciona una implementación de AlertDialog
que se mostrará con Material Design en todas las versiones compatibles del sistema operativo Android, como se muestra a continuación:
Primero necesita agregar la biblioteca V7 Appcompat a su proyecto. Puedes hacer esto en el archivo build.gradle de nivel de aplicación:
dependencies {
compile 'com.android.support:appcompat-v7:24.2.1'
//........
}
Asegúrese de importar la clase correcta:
import android.support.v7.app.AlertDialog;
Luego crea AlertDialog como este:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Are you sure?");
builder.setMessage("You'll lose all photos and media!");
builder.setPositiveButton("ERASE", null);
builder.setNegativeButton("CANCEL", null);
builder.show();
ListView en AlertDialog
Siempre podemos usar ListView
o RecyclerView
para seleccionar de la lista de elementos, pero si tenemos una pequeña cantidad de opciones y entre esas opciones queremos que el usuario seleccione una, podemos usar AlertDialog.Builder setAdapter
.
private void showDialog()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Choose any item");
final List<String> lables = new ArrayList<>();
lables.add("Item 1");
lables.add("Item 2");
lables.add("Item 3");
lables.add("Item 4");
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, lables);
builder.setAdapter(dataAdapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"You have selected " + lables.get(which),Toast.LENGTH_LONG).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
Quizás, si no necesitamos un ListView
particular, podemos usar una forma básica:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select an item")
.setItems(R.array.your_array, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// The 'which' argument contains the index position of the selected item
Log.v(TAG, "Selected item on position " + which);
}
});
builder.create().show();
Cuadro de diálogo de alerta personalizada con EditText
void alertDialogDemo() {
// get alert_dialog.xml view
LayoutInflater li = LayoutInflater.from(getApplicationContext());
View promptsView = li.inflate(R.layout.alert_dialog, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
getApplicationContext());
// set alert_dialog.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);
final EditText userInput = (EditText) promptsView.findViewById(R.id.etUserInput);
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// get user input and set it to result
// edit text
Toast.makeText(getApplicationContext(), "Entered: "+userInput.getText().toString(), Toast.LENGTH_LONG).show();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
Archivo Xml: res / layout / alert_dialog.xml
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Type Your Message : "
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/etUserInput"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
Cuadro de diálogo personalizado a pantalla completa sin fondo y sin título
en styles.xml
agrega tu estilo personalizado:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppBaseTheme" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
</style>
</resources>
Cree su diseño personalizado para el diálogo: fullscreen.xml
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
Luego, en el archivo java puede usarlo para una Actividad o un Diálogo, etc.
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
public class FullscreenActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//You can set no content for the activity.
Dialog mDialog = new Dialog(this, R.style.AppBaseTheme);
mDialog.setContentView(R.layout.fullscreen);
mDialog.show();
}
}
Cuadro de diálogo de alerta con título de multilínea
El método setCustomTitle () de AlertDialog.Builder le permite especificar una vista arbitraria que se usará para el título del diálogo. Un uso común de este método es crear un diálogo de alerta que tenga un título largo.
AlertDialog.Builder builder = new AlertDialog.Builder(context, Theme_Material_Light_Dialog);
builder.setCustomTitle(inflate(context, R.layout.my_dialog_title, null))
.setView(inflate(context, R.layout.my_dialog, null))
.setPositiveButton("OK", null);
Dialog dialog = builder.create();
dialog.show();
my_dialog_title.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<TextView
style="@android:style/TextAppearance.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur
tincidunt condimentum tristique. Vestibulum ante ante, pretium porttitor
iaculis vitae, congue ut sem. Curabitur ac feugiat ligula. Nulla
tincidunt est eu sapien iaculis rhoncus. Mauris eu risus sed justo
pharetra semper faucibus vel velit."
android:textStyle="bold"/>
</LinearLayout>
my_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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp"
android:scrollbars="vertical">
<TextView
style="@android:style/TextAppearance.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="Hello world!"/>
<TextView
style="@android:style/TextAppearance.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="Hello world again!"/>
<TextView
style="@android:style/TextAppearance.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="Hello world again!"/>
<TextView
style="@android:style/TextAppearance.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="Hello world again!"/>
</LinearLayout>
</ScrollView>