Xamarin.Formsでクリップボードを使う
Xamarin.Formsでクリップボードの機能を使用するには、
Xamarin.Formsにインターフェースを作成し、
各プラットフォームのプロジェクトで作成したインターフェースを実装する必要があります。
まずはXamarin.Formsプロジェクトにクリップボードを使用するための
インターフェース作成します。
IClipBoard.cs
using System;
namespace ClipSample
{
public interface IClipBoard
{
//ペースト用メソッド
String GetTextFromClipBoard();
//コピー用メソッド
bool SetTextToClipBoard(string text);
}
}
Androidプロジェクトにインターフェースの実装クラスを作成します
ClipBoard_Droid.cs
using Android.Content;
using ClipSample.Droid;
using Xamarin.Forms;
[assembly: Dependency(typeof(ClipBoard_Droid))]
namespace ClipSample.Droid
{
public class ClipBoard_Droid : IClipBoard
{
//ペースト用メソッド
public string GetTextFromClipBoard()
{
//クリップボードからテキストを取得
var clipboardmanager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);
var item = clipboardmanager.PrimaryClip.GetItemAt(0);
var text = item.Text;
return text;
}
//コピー用メソッド
public bool SetTextToClipBoard(string text)
{
//引数のテキストをクリップボードに格納
var clipboardManager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);
ClipData clip = ClipData.NewPlainText("", text);
clipboardManager.PrimaryClip = clip;
return true;
}
}
}
iOSプロジェクトにインターフェースの実装クラスを作成します
ClipBoard_iOS.cs
using Foundation;
using ClipSample.iOS;
using UIKit;
[assembly: Xamarin.Forms.Dependency(typeof(ClipBoard_iOS))]
namespace ClipSample.iOS
{
public class ClipBoard_iOS:IClipBoard
{
//ペースト用メソッド
public string GetTextFromClipBoard()
{
//クリップボードからテキストを取得
var pb = UIPasteboard.General.GetValue("public.utf8-plain-text");
return pb.ToString();
}
//コピー用メソッド
public bool SetTextToClipBoard(string text){
//引数のテキストをクリップボードに格納
UIPasteboard.General.SetValue(new NSString(text), MobileCoreServices.UTType.Text);
return true;
}
}
}
Xamarin.Formsプロジェクトで実際に使用するには、
DepedencyServiceクラスを使用して、各プラットフォームで作成した
実装クラスのメソッドを呼び出します。
ClipSamplePage.xaml.cs
namespace ClipSample
{
public partial class ClipSamplePage : ContentPage
{
//中略
//ペースト
public void onPast(object sender, EventArgs e)
{
var clipboardText = DependencyService.Get().GetTextFromClipBoard();
}
//コピー
public void onCopy(object sender, EventArgs e)
{
DependencyService.Get().SetTextToClipBoard("コピーするテキスト");
}
}
}