分类 Xamarin.Android 中的文章

记在为Xamarin.Android项目接入Huawei HMS的检测更新接口时遇到的坑

事情是这样的,前期我将岁寒输入法上传到了华为应用市场,最近我进行版本更新时审核不过,原因如下: 审核要求我接入华为的检测更新接口,简单的说就是在用户进入应用时检测一下应用市场是否有更新的版本,如果有的话就提示用户。 接入一个接口而已,想来应该也不难,不料竟是一个大坑。 如果我所使用的是……

阅读全文

在输入法开发中解决Android P下导航栏出现黑条的问题,并介绍Xamarin.Android下的一个坑

自Android P发布以来,陆陆续续的有用户向我反映Android P下输入法存在导航栏变黑的问题,情况如下所示。 于是我抽时间研究了一下这个问题。 经过一番搜索,我在Simple Keyboard下找到了解决方案,其代码大致如下: private int mOriginalNavBarColor = 0; private int mOriginalNavBarFlags = 0; ...... private void setNavigationBarColor() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { ...... final Window window = getWindow().getWindow(); if (window……

阅读全文

解决Xamarin.Android绑定第三方库时类型丢失的问题(一)

现象 今天在做一个第三方库绑定时,遇到如下情况: ![](http://image.suihanime.com/解决Xamarin.Android绑定第三方库时类型丢失的问题(一)_00001.jpg) 摘取其中一段代码如下: /Users/huangboru/myfile/xamarin_workspace/version4/CrashEyeTestPlus/obj/Debug/generated/src/Com.Xsj.Crasheye.ActionError.cs(88,88): Error CS0234: The type or namespace name 'IInterfaceDataType' does not exist in the namespace 'Com.Xsj.Crasheye' (are you missing an assembly reference?) (CS0234) (CrashEyeTestPlus) 错误代码的意……

阅读全文

如何开发Android原生库并应用到Xamarin.Android

本文将向大家介绍如何使用Android Studio开发原生库,并将其应用到Xamarin.Android的方法步骤; 本文中我所使用的Android Studio版本和Visual Studio For Mac版本情况分别如下: 下述内容在以上两个版本的开发环境中是有效的。 Android Studio开发部分 首先,新建……

阅读全文

使用代码定义GridLayout的方法

网上关于GridLayout的使用方法基本上都是用的xml文件,但既然是要使用网格布局,那说明准备放入其中的子视图肯定不少,都用xml写太过繁琐,那么如果我们想要代码来描述,应该怎么办呢? 问题的关键就是要使用 GridLayout.Spec类。 下面我简单演示一下利用GridLayo……

阅读全文

Xamarin.Android中如何根据给定的文件名获取文件

这里我们通过C#的反射机制来实现这个功能,以获取Resource/drawable文件夹下的图片为例: public int getResourceByReflect(String imageName) { var drawable = typeof(Resource.Drawable); int r_id = 0; try { var field = drawable.GetField(imageName); r_id = (int)field.GetValue(field.Name); } catch (Exception e) { } return r_id; } 使用方法: var id = getResourceByReflect(iconItem.Name); if (id == 0) return; var picture = BitmapFactory.DecodeResource(Context.Resources, id); 需要指出的是,在原生技术中,也可以通过反射实现这个功能,但其反射的目标对象是J……

阅读全文

Xamarin.Android开发中一些不可不知的知识点

Xamarin.Android所提供的接口基本上是对原生接口的再封装,但Xamarin团队在封装时采用了C#风格,这会导致某些API的用法无法完全和原生方法对照起来。除此之外,由于Xamarin.Android并不是将C#直接翻译成JVM语言,而是引入了Mono运行时,通过ACW……

阅读全文

Xamarin.Android下启动邮件发送的方法

在Android的原生平台上,启动邮件发送的方法如下: Intent i = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", "443570993@qq.com", null)); i.putExtra(Intent.EXTRA_SUBJECT, "致岁寒输入法作者"); i.putExtra(Intent.EXTRA_TEXT, "请写下您的建议或者遇到的问题..."); startActivity(Intent.createChooser(i, "反馈建议")); 在Xamarin.Android下,与上面对应的实现为: Intent i = new Intent(Intent.ActionSendto, Android.Net.Uri.FromParts("mailto", "443570993@qq.com", null));……

阅读全文

使用C#实现byte[]转UIImage、Image

不啰嗦,直接上代码 byte[]转UIImage 在Xamarin.iOS项目中用。 public UIImage bytesToUIImage(byte[] data){ if (data == null) return null; GCHandle hObject = GCHandle.Alloc(data, GCHandleType.Pinned); IntPtr pObject = hObject.AddrOfPinnedObject(); NSData nsdata = NSData.FromBytes(pObject, (System.nuint)data.Length); UIImage image = UIImage.LoadFromData(nsdata); if (hObject.IsAllocated) hObject.Free(); return image; } catch (Exception e) { } return null; } byte[]转Image 在Xamarin.Form中用。 public Image bytesToImage(byte[] data){ var image = new Image(); image.Source = ImageSource.FromStream(() => new MemoryStream(data)); return image; } Stream转byte[……

阅读全文