Xamarin Android Pano, Masaüstü, web ve mobil uygulamalarda sürekli kullandığımız ortak işlevlerden biride kopyala yapıştır işlevidir bu işlevi xamarin ile android cihazlarda nasıl gerçekleştirebileceğimizi göreceğiz.
Xamarin Android Pano Kopyala-Yapıştır İşlevini Kullanma
Xamarin ile panoda kopyala yapıştır işlevlerinin nasıl yapıldığını ayrıntılı örnek ile anlatmaya çalışacağım. ClipboardManager sınıfına Android.Content namespace’i altında ulaşabilirsiniz. Pano yöneticisi servisini kullanmak için GetSystemService metodunu kullanacağız parametre olarak ClipboardService sabit değişkenini geçiyoruz yada “clipboard” yazıyoruz. Böylelikle kopyala yapıltır yapabileceğimiz servisi pano yöneticisi servisini elde etmiş oluyoruz.
Şimdi MainActivity.cs dosyası içeriğine bakalım ardından bu kodları yorumlayalım.
MainActivity.cs(C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | using Android.App; using Android.Content; using Android.OS; using Android.Widget; using R = MHG.ClipboardManager.Resource; namespace MHG.ClipboardManager { [Activity(Label = "MHG.ClipboardManager", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { Button btnKopyala; Button btnYapistir; EditText etKopyala; EditText etYapistir; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(R.Layout.Main); btnKopyala = FindViewById<Button>(R.Id.btnKopyala); btnYapistir = FindViewById<Button>(R.Id.btnYapistir); etKopyala = FindViewById<EditText>(R.Id.etKopyala); etYapistir = FindViewById<EditText>(R.Id.etYapistir); var panoYoneticisi = (Android.Content.ClipboardManager)GetSystemService(ClipboardService); btnKopyala.Click += delegate { if (string.IsNullOrEmpty(etKopyala.Text)) Toast.MakeText(this, "Kopyalanacak metin giriniz!", ToastLength.Short).Show(); else { var clip = ClipData.NewPlainText("kopyala", etKopyala.Text); panoYoneticisi.PrimaryClip = clip; Toast.MakeText(this, "Metin kopyalandı!", ToastLength.Short).Show(); } }; btnYapistir.Click += delegate { if (!panoYoneticisi.HasPrimaryClip) Toast.MakeText(this, "Yapıştırılacak metin bulunamadı!", ToastLength.Short).Show(); else { var clip = panoYoneticisi.PrimaryClip; etYapistir.Text = clip.GetItemAt(0).Text; } }; } } } |
Pano yöneticisi üstteki kodda görebilirsiniz şimdi iki farklı parametre ile pano yöneticisini nasıl elde edebileceğimize bakalım.
1 2 | var panoYoneticisi = (Android.Content.ClipboardManager)GetSystemService(ClipboardService); var panoYoneticisi2 = (Android.Content.ClipboardManager)GetSystemService("clipboard"); |
Pano yöneticisine eriştiğimize göre şimdide kopyalama işleminin nasıl yapıldığına bakalım. Kopyalama işlemlerini ClipData sınıfının static metodları üzerinden gerçekleştireceğiz. Genellikle NewPlainText adlı metodu kullanacağız.
1 2 | var clip = ClipData.NewPlainText("kopyala", etKopyala.Text); panoYoneticisi.PrimaryClip = clip; |
Panoya metin kopyalama haricinde URI, Html ve Intent dahi kopyalabilmektesiniz.
Yapıştırma işlemi yapmak istediğinizde öncelikle panoda kopyanabilecek içerik olup olmadığını kontrol etmelisiniz bunun için panoYonetici değişkeninin HasPrimaryClip özelliği ile kontrolünü sağlıyoruz. Eğer kopyalanacak içerik varsa o zaman panodaki içeriği almak için kopyalama esnasında kullandığımız PrimaryClip özelliğini tekrar kullanacağız bu defa panoya kopyalama değil kopyalanan değeri alacağız.
PrimaryClip özelliği geriye haliyle ClipData sınıfı döndericektir bu sınıf içerisindeki kopyalama işlemi yapılmış metni almak için GetItem(0) metodunu ve daha sonra bu metod sonucunda dönen sınıfın Text özelliği ile kopyalanmış metinsel içeriğe ulaşmış oluyoruz. Şimdi MainActiviy.cs içerisindeki bu konu ile ilgili örnek kodumuza gözatalım.
1 2 3 4 5 6 7 | if (!panoYoneticisi.HasPrimaryClip) Toast.MakeText(this, "Yapıştırılacak metin bulunamadı!", ToastLength.Short).Show(); else { var clip = panoYoneticisi.PrimaryClip; etYapistir.Text = clip.GetItemAt(0).Text; } |
Main.axml(XML)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_height="wrap_content" android:layout_width="match_parent" android:layout_gravity="center" android:src="@drawable/mhg" /> <EditText android:hint="Kopyalanacak Metni Yazın" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/etKopyala" /> <EditText android:hint="Buraya Yapıştırılacak" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/etYapistir" /> <LinearLayout android:orientation="horizontal" android:weightSum="2" android:layout_height="wrap_content" android:layout_width="match_parent"> <Button android:id="@+id/btnKopyala" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_weight="1" android:text="Kopyala" android:paddingRight="5dp" /> <Button android:id="@+id/btnYapistir" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_weight="1" android:text="Yapıştır" android:paddingLeft="5dp" /> </LinearLayout> </LinearLayout> |
Bu örneğimize ait kodlara ve xamarin’de yaptığımız diğer tüm projelere alttaki gihub linkinden ulaşabilirsiniz.