66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

[Xamarin.Android]使用Java Bindings Libary项目 Binding Java组件(.jar)

使用Xamarin开发Android APP时,

如果已经有原本就用Java写好的套件(.jar),

就可以利用Xamarin提供的Java Bindings Libary将他变成C#可使用的组件。

这里用Eclipse和VS2010来作范例。

首先用Eclipse开启一个新Java项目,套件名称就取名叫xamarin.testbinding。

并建立两个类分别为Test、TestBinding。

image_thumb.png

将Test做成一个抽象类,并给定一个未实践的方法testProtected(),存取修饰给protected。

稍后会提为什么要这样做~public abstract class Test {

protected abstract String testProtected();

}

接着开始写TestBinding这个Class,记得要让他继承刚刚写好的Test抽象类。

这里刻意将实践出的testProtected这个方法的存取修饰改成public。在Java中这样是可以编译过的~import java.util.HashMap;

public final class TestBinding extends Test {

public String Test(){

return "Binding Test";

}

public int TestHashMap(HashMapmap){

return map.get("V1")+map.get("V2");

}

@Override

public String testProtected() {

// TODO 自动产生的方法 Stub

return "Test Visibility";

}

}

利用Eclipse的导出功能可以很快的做出jar档。

image_thumb_1.png

image_thumb_3.png

image_thumb_4.png

到这里jar已经成功的做出来了。

接着就是要如何用java binding让C#也能调用这个组件。

开启VS2010,选择Java Bindings Libary项目范本。

image_thumb_5.png

开启后的目录结构

image_thumb_6.png

将我们做出的jar档加入至Jars数据夹内。

image_thumb_7.png

选择jar档

image_thumb_8.png

加入完成

image_thumb_9.png

然后将jar档的属性中的建置动作改成EmbeddedJar

image_thumb_10.png

到这就可以建置项目了,通常没有问题的情况下是可以直接建置成功的,

但是刚刚做的Java程序中,有一个东西是不符合 C#规则的

image_thumb_11.png

没错,就是刚刚的存取修饰,在C#中是不能变更继承方法的存取修饰的,否则就会出现这样的错误。

点开错误找到错误的地方。

就可以发现他自动产生出抽象类中的TestProtected存取修饰是protected

image_thumb_12.png

image_thumb_13.png

image_thumb_14.png

该class档是自动产生出来的,所以直接去改他也没有意义,

利用修改Transforms数据夹中的Metadata.xml来指定在自动产生文件时,

可把该方法的存取修饰改成protected。

先点选刚刚点击错误跳出来的地方,上面就有写着把该方法加进Metadata的资讯,只要Path开始后那段。

image_thumb_15.png

开启Metadata.xml,在metadata tag内增加一个attr tag 并把刚刚复制的那段当作tag的属性加进去,

再给一个属性为name,值为visibility。tag内的值就给protected,并重新建置。

这样在建置时他就会自动把该方法改为protected。

(如还会失败的话可以试着把自动产出的class窗口关闭,并用清除重建的方式建置)

重建成功后,可以看项目目录下的objDebuggeneratedsrcXamarin.Testbinding.TestBinding.cs

这就是自动产生出来的cs档。看到刚刚错误的地方已经被改成protected了。

image_thumb_16.png

image_thumb_17.png

接着就是测试拉~

加入一个Android View项目来测试程序。

image_thumb_18.png

在View中参考刚刚完成的binding项目。

image_thumb_20.png

image_thumb_19.png

点一下刚刚参考的项目,已经可以看到Java中做出来的类了。

可以发现看不到testProtected这个方法,因为修饰词为protected必须要继承后才可存取。

image_thumb_21.png

image_thumb_22.png

开启View中默认的Layout,原本的就不理了~新增两个按钮。

image_thumb_24.png

Test按钮就调用Java中的Test方法。并执行看结果。很成功的取得Java Test方法中回传的字符串。FindViewById(Resource.Id.btnTest).Click += (sender, e) => { Toast.MakeText(this, test.Test(), ToastLength.Short).Show(); };

image_thumb_25.png

至于另外一个方法…嗯 这是要我传啥鬼进去才行

image_thumb_26.png

对TestHashMap点击右键移至定义就可以看到自动产生出的程序。其中这一行就是我们要传入的类型,JavaDictionary

也确定他有实践IDictionary

image_thumb_28.png

image_thumb_29.png

image_thumb_30.png

照着原本要V1和V2的Key给值。

测试成功~{

JavaDictionarydic = new JavaDictionary();

dic.Add("V1", 100);

dic.Add("V2", 300);

Toast.MakeText(this, test.TestHashMap(dic).ToString(), ToastLength.Short).Show();

};

image_thumb_31.png

binding项目中还有其他许多可以设定的东西,像是当传入参数是枚举值时,

自动产生出来的Class参数会变成int类型,必须要明确的去指定他的类型才会转成Xamarin中对应的枚举值。

例如Android.Graphics.Color。

可以看看官网的教学也有满详细的范例喔。

http://docs.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding_a_java_library_(.jar)

范例档下载(含Java原始程序)

以上~谢谢收看~~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐