我有两个关于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>
那么如何在代码中访问视图?
答案 0 :(得分:0)
我还没有开发原生Android应用程序,所以我可能无法正确回答您的问题,但我认为您不能将它们视为本机开发项目的完整副本。您基本上使用Xamarin已经公开的API来实现您可以在Android中执行的类似任务。在本机Android开发中可能仍然可以实现某些功能,但Xamarin却无法实现,反之亦然。
要回答第二个问题,正确的代码行将是:
var textView = FindViewById<TextView> (Resource.Id.textView1);
另外,您已使用正确的方法为活动设置布局。
答案 1 :(得分:0)
确保只在调用SetContentView后调用FindViewById 。试试这个:
base.OnCreate(bundle);
SetContentView(Resource.Layout.myLay);
var textView = FindViewById<TextView>(Resource.Id.textView1);