Xamarin充分展示了原生开发?

时间:2014-10-02 08:21:51

标签: c# android xamarin xamarin.ios xamarin.android

我有两个关于Xamarin的问题:

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

所以,这里有一个问题:那些特定于平台的项目是否是"本地开发"项目?换句话说 - 我能否在Xamarin.Android项目中做同样的事情,例如,adt + java?

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

2)第二个问题与Android 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);

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

这是我的布局`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>

那么如何在代码中访问视图?

2 个答案:

答案 0 :(得分:0)

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

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

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

另外,您已使用正确的方法为活动设置布局。

答案 1 :(得分:0)

  1. Xamarin.Android允许您为Android编写C#代码。它直接映射到Java中可用的所有API。 Xamarin.Forms是一个跨平台的抽象。它的所有组件都映射到每个平台上的本机组件。使用Xamarin.Forms可以实现的任何功能都可以通过Java使用“原生”Android开发来实现,反之则不然。要获得对所有Android API的完全访问权限,您需要使用Xamarin.Android。
  2. 确保只在调用SetContentView后调用FindViewById 。试试这个:

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