Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kullanıcının bir saat seçmesi için bir yol sağlamak için TimePicker'ı kullanabilirsiniz. Android uygulamaları genellikle bir zaman değeri seçmek için TimePickerDialog ile birlikte kullanılırTimePicker; bu, cihazlar ve uygulamalar arasında tutarlı bir arabirim sağlamaya yardımcı olur. TimePicker kullanıcıların günün saatini 24 saat veya 12 saatlik AM/PM modunda seçmesine olanak tanır.
TimePickerDialog , bir iletişim kutusunda öğesini TimePicker kapsülleyen bir yardımcı sınıfıdır.
Genel bakış
Modern Android uygulamaları bir DialogFragment içinde öğesini görüntülerTimePickerDialog. Bu, bir uygulamanın açılan iletişim kutusu olarak görüntülemesini TimePicker veya bir Etkinlik içine eklemesini mümkün kılar. Buna ek olarak, DialogFragment iletişim kutusunun yaşam döngüsünü ve görünümünü yönetir ve uygulanması gereken kod miktarını azaltır.
Bu kılavuzda, içinde sarmalanmış olarak nasıl kullanılacağı TimePickerDialoggösterilmektedir DialogFragment. Kullanıcı etkinlik üzerindeki bir düğmeye TimePickerDialog tıkladığında örnek uygulama bunu kalıcı bir iletişim kutusu olarak görüntüler. Saat kullanıcı tarafından ayarlandığında, iletişim kutusundan çıkar ve bir işleyici etkinlik ekranında seçili olan saati güncelleştirir TextView .
Gereksinimler
Bu kılavuz için örnek uygulama Android 4.1 (API düzeyi 16) veya üzerini hedefler, ancak Android 3.0 (API düzeyi 11 veya üzeri) ile kullanılabilir. Android Destek Kitaplığı v4'ün projeye eklenmesi ve bazı kod değişiklikleri ile Android'in eski sürümlerini desteklemek mümkündür.
TimePicker kullanma
Bu örnek genişletir; alt sınıf uygulaması DialogFragment (aşağıda adlandırılırTimePickerFragment) konaklar DialogFragmentve görüntülerTimePickerDialog. Örnek uygulama ilk kez başlatıldığında, seçili saati görüntülemek için kullanılacak bir TextView pick TIME düğmesinin üzerinde görüntülenir:
SAAT SEÇ düğmesine tıkladığınızda, örnek uygulama şu ekran görüntüsünde görüldüğü gibi uygulamasını TimePickerDialog başlatır:
TimePickerDialogiçinde bir saat seçip Tamam düğmesine tıklanması, öğesinin TimePickerDialog IOnTimeSetListener.OnTimeSet yöntemini çağırmasına neden olur.
Bu arabirim barındırma DialogFragment tarafından uygulanır (TimePickerFragmentaşağıda açıklanmıştır). İptal düğmesine tıkladığınızda parça ve iletişim kutusu kapatılır.
DialogFragment seçilen zamanı barındırma Etkinliği'ne üç yoldan biriyle döndürür:
Bir yöntemi çağırma veya özellik ayarlama – Etkinlik, özellikle bu değeri ayarlamak için bir özellik veya yöntem sağlayabilir.
Olay oluşturma –
DialogFragmentçağrıldığındaOnTimeSettetiklenecek bir olayı tanımlayabilir.Actionkullanarak :DialogFragment, etkinlikte saati görüntülemek için birAction<DateTime>çağırabilir. Etkinliği, örneği oluştururken öğesiniDialogFragmentsağlarAction<DateTime.
Bu örnek, Activity öğesinin öğesine bir Action<DateTime> işleyici DialogFragmentsağlamasını gerektiren üçüncü tekniği kullanır.
Uygulama Projesi Başlatma
TimePickerDemo adlı yeni bir Android projesi başlatın (Xamarin.Android projeleri oluşturmayı bilmiyorsanız, yeni bir proje oluşturmayı öğrenmek için bkz. Merhaba, Android).
Resources/layout/Main.axml dosyasını düzenleyin ve içeriğini aşağıdaki XML ile değiştirin:
<?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"
android:layout_gravity="center_horizontal"
android:padding="16dp">
<Button
android:id="@+id/select_button"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="PICK TIME"
android:textSize="20dp" />
<TextView
android:id="@+id/time_display"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:paddingTop="22dp"
android:text="Picked time will be displayed here"
android:textSize="24dp" />
</LinearLayout>
Bu, saati görüntüleyen bir TextView ve öğesini açan bir Düğme içeren temel bir LinearLayout'tırTimePickerDialog. Bu düzenin, uygulamayı daha basit ve kolay anlaşılır hale getirmek için sabit kodlanmış dizeler ve boyutlar kullandığını unutmayın. Üretim uygulaması normalde bu değerler için kaynakları kullanır (DatePicker kod örneğinde görüldüğü gibi).
MainActivity.cs düzenleyin ve içeriğini aşağıdaki kodla değiştirin:
using Android.App;
using Android.Widget;
using Android.OS;
using System;
using Android.Util;
using Android.Text.Format;
namespace TimePickerDemo
{
[Activity(Label = "TimePickerDemo", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
TextView timeDisplay;
Button timeSelectButton;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
timeDisplay = FindViewById<TextView>(Resource.Id.time_display);
timeSelectButton = FindViewById<Button>(Resource.Id.select_button);
}
}
}
Bu örneği derleyip çalıştırdığınızda, aşağıdaki ekran görüntüsüne benzer bir başlangıç ekranı görmeniz gerekir:
PICK TIME düğmesine tıklanması hiçbir şey yapmaz çünkü DialogFragment öğesini görüntülemek TimePickeriçin henüz uygulanmamıştır.
Sonraki adım, bunu DialogFragmentoluşturmaktır.
DialogFragment Genişletiyor
ile TimePickerkullanmak üzere genişletmek DialogFragment için, 'den DialogFragment türetilen ve uygulayan TimePickerDialog.IOnTimeSetListenerbir alt sınıf oluşturmak gerekir. aşağıdaki sınıfı MainActivity.cs ekleyin:
public class TimePickerFragment : DialogFragment, TimePickerDialog.IOnTimeSetListener
{
public static readonly string TAG = "MyTimePickerFragment";
Action<DateTime> timeSelectedHandler = delegate { };
public static TimePickerFragment NewInstance(Action<DateTime> onTimeSelected)
{
TimePickerFragment frag = new TimePickerFragment();
frag.timeSelectedHandler = onTimeSelected;
return frag;
}
public override Dialog OnCreateDialog (Bundle savedInstanceState)
{
DateTime currentTime = DateTime.Now;
bool is24HourFormat = DateFormat.Is24HourFormat(Activity);
TimePickerDialog dialog = new TimePickerDialog
(Activity, this, currentTime.Hour, currentTime.Minute, is24HourFormat);
return dialog;
}
public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
{
DateTime currentTime = DateTime.Now;
DateTime selectedTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, hourOfDay, minute, 0);
Log.Debug(TAG, selectedTime.ToLongTimeString());
timeSelectedHandler (selectedTime);
}
}
Bu TimePickerFragment sınıf daha küçük parçalara ayrılmıştır ve sonraki bölümde açıklanmıştır.
DialogFragment Uygulaması
TimePickerFragment çeşitli yöntemler uygular: bir fabrika yöntemi, bir İletişim kutusu örnekleme yöntemi ve OnTimeSet tarafından TimePickerDialog.IOnTimeSetListenergereken işleyici yöntemi.
TimePickerFragment, öğesinin bir alt sınıfıdırDialogFragment. Ayrıca arabirimini uygularTimePickerDialog.IOnTimeSetListener(yani gerekliOnTimeSetyöntemi sağlar):public class TimePickerFragment : DialogFragment, TimePickerDialog.IOnTimeSetListenerTAGgünlüğe kaydetme amacıyla başlatılır (MyTimePickerFragment , kullanmak istediğiniz dizeye değiştirilebilir). EylemtimeSelectedHandler, null başvuru özel durumlarını önlemek için boş bir temsilciye başlatılır:public static readonly string TAG = "MyTimePickerFragment"; Action<DateTime> timeSelectedHandler = delegate { };Yeni
NewInstanceTimePickerFragmentbir örneği oluşturmak için fabrika yöntemi çağrılır. Bu yöntem, kullanıcı içindeki Tamam düğmesine tıkladığında çağrılan birAction<DateTime>işleyiciTimePickerDialogalır:public static TimePickerFragment NewInstance(Action<DateTime> onTimeSelected) { TimePickerFragment frag = new TimePickerFragment(); frag.timeSelectedHandler = onTimeSelected; return frag; }Parça görüntülendiğinde Android, OnCreateDialog yöntemini çağırır
DialogFragment. Bu yöntem yeniTimePickerDialogbir nesne oluşturur ve bunu Activity, geri çağırma nesnesi (geçerli örneğiTimePickerFragment) ve geçerli saatle başlatır:public override Dialog OnCreateDialog (Bundle savedInstanceState) { DateTime currentTime = DateTime.Now; bool is24HourFormat = DateFormat.Is24HourFormat(Activity); TimePickerDialog dialog = new TimePickerDialog (Activity, this, currentTime.Hour, currentTime.Minute, is24HourFormat); return dialog; }Kullanıcı iletişim kutusundaki zaman ayarını
TimePickerdeğiştirdiğinde yöntemiOnTimeSetçağrılır.OnTimeSetgeçerli tarihi kullanarak birDateTimenesne oluşturur ve kullanıcı tarafından seçilen saat (saat ve dakika) içinde birleştirilir:public void OnTimeSet(TimePicker view, int hourOfDay, int minute) { DateTime currentTime = DateTime.Now; DateTime selectedTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, hourOfDay, minute, 0);Bu
DateTimenesne, oluşturma zamanında nesneyle kaydedilen öğesineTimePickerFragmentgeçirilirtimeSelectedHandler.OnTimeSetBu işleyiciyi çağırarak Etkinliğin zaman görüntüsünü seçili saate güncelleştirir (bu işleyici sonraki bölümde uygulanır):timeSelectedHandler (selectedTime);
TimePickerFragment'ı görüntüleme
artık uygulaması uygulandığına göreDialogFragment, artık factory yöntemini kullanarak NewInstance örneği oluşturmanın DialogFragment ve DialogFragment.Show komutunu çağırarak görüntülemenin zamanı geldi:
aşağıdaki yöntemi içine MainActivityekleyin:
void TimeSelectOnClick (object sender, EventArgs eventArgs)
{
TimePickerFragment frag = TimePickerFragment.NewInstance (
delegate (DateTime time)
{
timeDisplay.Text = time.ToShortTimeString();
});
frag.Show(FragmentManager, TimePickerFragment.TAG);
}
örneği eklendikten TimePickerFragmentsonraTimeSelectOnClick, Activity'in zaman görüntüsünü geçirilen saat değeriyle güncelleştiren anonim bir yöntem için bir temsilci oluşturur ve geçirir. Son olarak, kullanıcıya görüntülemek TimePicker için iletişim kutusu parçasını (aracılığıylaDialogFragment.Show) başlatırTimePicker.
Yöntemin OnCreate sonuna, olay işleyicisini iletişim kutusunu başlatan PICK TIME düğmesine eklemek için aşağıdaki satırı ekleyin:
timeSelectButton.Click += TimeSelectOnClick;
SEÇ ZAMANI düğmesine tıklandığında, TimeSelectOnClick kullanıcıya iletişim kutusu parçasını görüntülemek TimePicker için çağrılır.
Deneyin!
Uygulamayı derleyin ve çalıştırın. PICK TIME düğmesine tıkladığınızda, TimePickerDialog etkinliğin varsayılan saat biçiminde görüntülenir (bu durumda, 12 saatlik AM/PM modu):
İletişim kutusunda Tamam'a TimePicker tıkladığınızda işleyici, Etkinlik'leri TextView seçilen saatle güncelleştirir ve ardından şu tarihten çıkar:
Ardından, aşağıdaki kod satırını bildirildikten ve başlatıldıktan hemen sonraya OnCreateDialog is24HourFormat ekleyin:
is24HourFormat = true;
Bu değişiklik, oluşturucuya true geçirilen bayrağı barındırma Etkinliğinin TimePickerDialog zaman biçimi yerine 24 saat modunun kullanılmasına zorlar. Uygulamayı yeniden derleyip çalıştırdığınızda, ZAMAN SEÇ düğmesine tıklayın, TimePicker iletişim kutusu artık 24 saat biçiminde görüntülenir:
İşleyici, Saati Etkinliğin TextViewzamanına yazdırmak için DateTime.ToShortTimeString'i çağırdığından, saat yine de varsayılan 12 saatlik AM/PM biçiminde yazdırılır.
Özet
Bu makalede, bir pencere öğesinin TimePicker Android Etkinliği'nden açılan bir kalıcı iletişim kutusu olarak nasıl görüntüleneceği açıklanmıştır. Örnek DialogFragment bir uygulama sağladı ve arabirimini IOnTimeSetListener tartıştı. Bu örnek, seçilen saati görüntülemek için konak Etkinliği ile nasıl DialogFragment etkileşim kurabileceğini de göstermiştir.




