Xamarin充分体现了本土发展

本文关键字:Xamarin | 更新日期: 2023-09-27 18:25:22

我有两个关于Xamarin的问题:

1) 假设我们已经安装了Xamarin,并创建了一个包含3个项目的示例解决方案:一个跨平台通用项目,例如Xamarin.Forms引用(该项目将由另外两个项目引用);一个特定于Android平台的项目,参考Xamarin.Android;以及一个针对iOS的平台特定项目。

所以,问题来了:那些特定于平台的项目是否完全是"原生开发"项目的复制品?换句话说,我能在Xamarin.Android项目中做同样的事情吗?比如,adt+java?

这是否意味着,如果我不在我的解决方案中使用任何跨平台库,那么我最终会使用相同的本地开发工具,就像我在android中使用Adt+java一样?

2) 第二个问题与安卓Xamarin的开发有关。我的主要活动类是从Activity类派生而来的,比如这个

[Activity(Label = "HelloWorld", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.myLay);
    }
}

在方法OnCreate中,我正在设置我创建的主视图。一切都很好,我的布局显示在模拟器上。这是设置布局的正确方式吗?

如果我尝试访问一些元素,它是我布局的一部分,如下所示:

var textView = FindViewById(Resource.Id.textView1);

然后我得到空引用,好像没有这样的元素,但它存在。

这是我的布局`myLay.axml

<?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"
android:minWidth="25px"
android:minHeight="25px">
<TextView
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/textView1" />
<EditText
    android:inputType="textMultiLine"
    android:layout_width="match_parent"
    android:layout_height="285.1dp"
    android:id="@+id/editText1"
    android:layout_marginBottom="306.8dp"
    android:text="some text" />
</LinearLayout>

那么,我如何访问代码中的视图呢?

Xamarin充分体现了本土发展

我还没有开发本机Android应用程序,所以我可能无法正确回答您的问题,但我认为您不能将其视为本机开发项目的完整副本。您基本上是在使用Xamarin已经公开的API来实现您可以在Android中完成的类似任务。在原生Android开发中可能仍然有一些事情可以实现,但Xamarin不能实现,甚至反之亦然。

要回答第二个问题,正确的代码行是:

var textView = FindViewById<TextView> (Resource.Id.textView1);

此外,您已经使用了正确的方式来设置活动的布局。

  1. 安卓系统允许您为安卓系统编写C#代码。它直接映射到Java中所有可用的API。Forms是一个跨平台的抽象。它的所有组件都映射到每个平台上的本机组件。使用Xamarin可以实现的任何功能。使用Java进行"原生"Android开发可以实现表单,但反之亦然。为了获得所有Android API的完全访问权限,您需要使用Xamarin.Android
  2. 请确保仅在调用SetContentView之后才调用FindViewById。试试这个:

        base.OnCreate(bundle);  
        SetContentView(Resource.Layout.myLay);
        var textView = FindViewById<TextView>(Resource.Id.textView1);