mirror of
				https://gitee.com/csharpui/CPF.git
				synced 2025-11-01 00:46:56 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			182 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Android.App;
 | ||
| using Android.Content;
 | ||
| using Android.OS;
 | ||
| using Android.Runtime;
 | ||
| using Android.Views;
 | ||
| using Android.Widget;
 | ||
| using CPF.Input;
 | ||
| using System;
 | ||
| using System.Collections.Generic;
 | ||
| using System.Linq;
 | ||
| using System.Net;
 | ||
| using System.Text;
 | ||
| using System.Text.RegularExpressions;
 | ||
| 
 | ||
| namespace CPF.Android
 | ||
| {
 | ||
|     class ClipboardImpl : CPF.Input.IClipboard
 | ||
|     {
 | ||
|         private Context context = CpfActivity.CurrentActivity;
 | ||
| 
 | ||
|         private ClipboardManager ClipboardManager
 | ||
|         {
 | ||
|             get
 | ||
|             {
 | ||
|                 return this.context.GetSystemService(Context.ClipboardService).JavaCast<ClipboardManager>();
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         public void Clear()
 | ||
|         {
 | ||
|             ClipboardManager.PrimaryClip = null;
 | ||
|         }
 | ||
| 
 | ||
|         public bool Contains(DataFormat dataFormat)
 | ||
|         {
 | ||
|             var pc = ClipboardManager.PrimaryClip;
 | ||
|             if (pc != null && ClipboardManager.HasPrimaryClip)
 | ||
|             {
 | ||
|                 for (int i = 0; i < pc.ItemCount; i++)
 | ||
|                 {
 | ||
|                     var data = pc.GetItemAt(i);
 | ||
|                     if (dataFormat == DataFormat.Text)
 | ||
|                     {
 | ||
|                         if (data.Text != null)
 | ||
|                         {
 | ||
|                             return true;
 | ||
|                         }
 | ||
|                     }
 | ||
|                     else if (dataFormat == DataFormat.Html)
 | ||
|                     {
 | ||
|                         if (data.HtmlText != null)
 | ||
|                         {
 | ||
|                             return true;
 | ||
|                         }
 | ||
|                     }
 | ||
|                     else if (dataFormat == DataFormat.FileNames)
 | ||
|                     {
 | ||
|                         if (data.Uri != null)
 | ||
|                         {
 | ||
|                             return true;
 | ||
|                         }
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|             return false;
 | ||
|         }
 | ||
| 
 | ||
|         public object GetData(DataFormat dataFormat)
 | ||
|         {
 | ||
|             var pc = ClipboardManager.PrimaryClip;
 | ||
|             if (pc != null && ClipboardManager.HasPrimaryClip)
 | ||
|             {
 | ||
|                 for (int i = 0; i < pc.ItemCount; i++)
 | ||
|                 {
 | ||
|                     var data = pc.GetItemAt(i);
 | ||
|                     switch (dataFormat)
 | ||
|                     {
 | ||
|                         case DataFormat.Text:
 | ||
|                             return data.Text;
 | ||
|                         case DataFormat.Html:
 | ||
|                             return data.HtmlText;
 | ||
|                         case DataFormat.FileNames:
 | ||
|                             var file = data.Uri?.ToString();
 | ||
|                             if (file != null)
 | ||
|                             {
 | ||
|                                 return new string[] { file };
 | ||
|                             }
 | ||
|                             break;
 | ||
|                     }
 | ||
| 
 | ||
|                 }
 | ||
|             }
 | ||
|             return null;
 | ||
|         }
 | ||
| 
 | ||
|         public void SetData(params (DataFormat, object)[] data)
 | ||
|         {
 | ||
|             ClipData clipData = null;
 | ||
|             foreach (var item in data)
 | ||
|             {
 | ||
|                 switch (item.Item1)
 | ||
|                 {
 | ||
|                     case DataFormat.Text:
 | ||
|                         if (clipData == null)
 | ||
|                         {
 | ||
|                             clipData = ClipData.NewPlainText("text", item.Item2 as string);
 | ||
|                         }
 | ||
|                         else
 | ||
|                         {
 | ||
|                             clipData.AddItem(new ClipData.Item(item.Item2 as string));
 | ||
|                         }
 | ||
|                         break;
 | ||
|                     case DataFormat.Html:
 | ||
|                         var text = data.FirstOrDefault(a => a.Item1 == DataFormat.Text);
 | ||
|                         var str = text.Item1 != DataFormat.Unknown && text.Item2 != null ? text.Item2 as string : NoHTML(item.Item2 as string);
 | ||
| 
 | ||
|                         if (clipData == null)
 | ||
|                         {
 | ||
|                             clipData = ClipData.NewHtmlText("html", str, item.Item2 as string);
 | ||
|                         }
 | ||
|                         else
 | ||
|                         {
 | ||
|                             clipData.AddItem(new ClipData.Item(str, item.Item2 as string));
 | ||
|                         }
 | ||
|                         break;
 | ||
|                     case DataFormat.FileNames:
 | ||
|                         foreach (var file in item.Item2 as IEnumerable<string>)
 | ||
|                         {
 | ||
|                             if (clipData == null)
 | ||
|                             {
 | ||
|                                 clipData = ClipData.NewRawUri("URI", global::Android.Net.Uri.Parse(file));
 | ||
|                             }
 | ||
|                             else
 | ||
|                             {
 | ||
|                                 clipData.AddItem(new ClipData.Item(global::Android.Net.Uri.Parse(file)));
 | ||
|                             }
 | ||
|                         }
 | ||
|                         break;
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         ///   <summary>
 | ||
|         ///   去除HTML标记
 | ||
|         ///   </summary>
 | ||
|         ///   <param   name=”NoHTML”>包括HTML的源码   </param>
 | ||
|         ///   <returns>已经去除后的文字</returns>
 | ||
|         public static string NoHTML(string Htmlstring)
 | ||
|         {
 | ||
|             //删除脚本
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "",
 | ||
|             RegexOptions.IgnoreCase);
 | ||
|             //删除HTML
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "",
 | ||
|             RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "",
 | ||
|             RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"–>", "", RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"<!–.*", "", RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"",
 | ||
|             RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&",
 | ||
|             RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<",
 | ||
|             RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">",
 | ||
|             RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", "   ",
 | ||
|             RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
 | ||
|             Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);
 | ||
|             Htmlstring.Replace("<", "");
 | ||
|             Htmlstring.Replace(">", "");
 | ||
|             Htmlstring.Replace("\r\n", "");
 | ||
|             Htmlstring = WebUtility.HtmlEncode(Htmlstring).Trim();
 | ||
|             return Htmlstring;
 | ||
|         }
 | ||
|     }
 | ||
| } | 
