java - personalizar - Cómo hacer una cita giratoria en Android
personalizar datepicker android studio (3)
Creo que, en general, lo que la gente hace en este caso es usar un botón y diseñarlo como un hilandero ( un enfoque aquí , creo que un mejor enfoque , en su mayoría simplemente configurando el estilo para android.R.attr.spinnerStyle
), o usan un Girar pero sobrecargar la acción de hacer clic para crear un diálogo.
Por supuesto, la parte difícil es crear un cuadro de diálogo personalizado que incluya cosas agradables de mes / día / año (no son giratorias ... son como máquinas tragamonedas o algo así).
Hay algunas maneras de hacerlo, hay algo de documentación de Google aquí y siempre puedes levantar el código fuente de Android (aunque obviamente hay inconvenientes).
¿Cómo creo un girador de Android que abre un cuadro de diálogo de selección de fecha?
Quiero un Spinner que se parece al de la aplicación de calendario, como se muestra en la captura de pantalla a continuación.
Lo que ya he probado:
Hice un spinner en mi diseño XML e intenté establecer el atributo onclick para llamar a un método que muestra el diálogo. Cuando puse un nombre de método en "al hacer clic", obtuve un error que dice "No se pudieron encontrar las siguientes clases: Spinner (cambio a android.widget.Spinner, Fix Build Path, Edit XML)".
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showDatePickerDialog" />
showDatePickerDialog está en la clase correcta:
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getFragmentManager(), "Date");
}
Y esto es DatePickerFragment (copiado de otro sitio web):
import java.util.Calendar;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.widget.DatePicker;
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
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);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
}
}
SOLUCIÓN:
Encontré la solución en otra pregunta .
Usé un spinner regular en el archivo de diseño, luego en mi clase de actividad, tiene este código:
dateSpinner = (Spinner)findViewById(R.id.spinner_date);
View.OnTouchListener Spinner_OnTouch = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
showDatePickerDialog(v);
}
return true;
}
};
View.OnKeyListener Spinner_OnKey = new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
showDatePickerDialog(v);
return true;
}
else {
return false;
}
}
};
dateSpinner.setOnTouchListener(Spinner_OnTouch);
dateSpinner.setOnKeyListener(Spinner_OnKey);
Parece un poco pirateado, pero funciona. ¿Alguien sabe una forma más limpia de hacerlo? No me dejaría establecerOnClickListener () o setOnItemClickListener () en la rueda giratoria.
Pude lograrlo muy fácilmente. Se ve exactamente como el de la aplicación de calendario :)
Usa un TextView y dale un estilo de giro:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.Holo.Spinner" />
Para API 10 e inferior sin el tema Holo, use:
style="@android:style/Widget.Spinner"
Un botón es la mejor manera, solo necesita cambiar el estilo del botón. Intenté establecer el estilo predeterminado de Android Spinner en mi botón, pero no funciona correctamente. Así que hice mi propio estilo (es una copia del estilo de giro predeterminado). Aquí está:
`<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@drawable/spinner_disabled_holo_light" />
<item android:state_pressed="true"
android:drawable="@drawable/spinner_pressed_holo_light" />
<item android:state_pressed="false" android:state_focused="true"
android:drawable="@drawable/spinner_focused_holo_light" />
<item android:drawable="@drawable/spinner_default_holo_light" />
</selector>
`
Las imágenes que encontrará en .. / sdk / platform / android - %% / data / res / drawable .
Esto funciona bien para mi. Esta es una forma sencilla de hacer un estilo de botón giratorio, como el botón giratorio en Google Calendar.