Xamarin Android: 无法使用 ActionBarActivity
Xamarin Android: Cannot use ActionBarActivity
我很难在我的应用程序中使用 ActionBarActivity,因为我无法导入它。
我尝试添加 Android 支持库 4、7、13 和 17...
Nr.7、13 和 17 不起作用,因为 "Some required packages are not referenced by the project"。我还没弄明白那是什么意思。
Nr.4 不起作用,因为 "The type or namespace name 'ActionBarActivity' could not be found (are you missing a using directive or an assembly reference?) C:\progge\Apper\AkvaApp\AkvaApp\AkvaApp\Browser.cs"... 即使 ActionBarActivity 应该包含在组件中。
我一次又一次地建造和重建。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Support.V4;
using Xamarin;
namespace AkvaApp
{
[Activity(Label = "Browser")]
public class Browser : ActionBarActivity, ActionBar.ITabListener
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SupportRequestWindowFeature(WindowCompat.FeatureActionBar);
ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
SetContentView(Resource.Layout.BrowserLayout);
ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
ActionBar.Tab tab = ActionBar.NewTab();
tab.SetText(Resources.GetString(Resource.String.SearchTabText));
tab.TabSelected += (sender, args) =>
{
Android.Util.Log.Info(this.Class.Name, "this is an info message");
Android.Util.Log.Warn(this.Class.Name, "this is a warning message");
Android.Util.Log.Error(this.Class.Name, "this is an error message");
};
}
public void OnTabReselected(ActionBar.Tab tab, FragmentTransaction ft)
{
throw new NotImplementedException();
}
public void OnTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
{
throw new NotImplementedException();
}
public void OnTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)
{
throw new NotImplementedException();
}
}
}
为什么?
您需要将 nuget 包添加到 Support Library v7 AppCompat 才能使用 ActionBarActivity。 Xamarin 的 James Montemagno 解释了这一点:http://blog.xamarin.com/android-support-library-v7-hello-actionbarcompat/
如果您想知道为什么会出现 "Some required packages are not referenced by the project",您应该查看程序包控制台以了解实际错误消息的内容。
ActionBarActivity 是 Martijn 提到的支持库 v7 AppCompat 的一部分
https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html
- 创建一个新的 Xamarin.Android 空白项目(确保目标框架设置为 API 21)
- 通过 Nuget 安装 Android 支持库 v7 AppCompat - https://www.nuget.org/packages/Xamarin.Android.Support.v7.AppCompat/
- 将
Android.App.ActionBar
替换为 ActionBar
,因为您正试图从静态上下文访问它。
- 请注意,ActionBar TabListener 是
deprecated
,您应该改用其他模式(http://developer.android.com/design/patterns/navigation.html)
我仍然没能在 Visual Studio 中让它工作,但我在 Xamarin Studio 中做到了。
在 Visual Studio 中添加支持库 v7 根本没有帮助,但在 Xamarin Studio 中添加它修复了它。
对于 Xamarin Studio:
右键单击项目(不是解决方案),单击“添加”->“添加 NuGet 包”,搜索 "support library v7",勾选 AppCompat,然后单击“添加包”。
然后在需要这个库的class中,添加"using Android.Support.V7;"
我很难在我的应用程序中使用 ActionBarActivity,因为我无法导入它。 我尝试添加 Android 支持库 4、7、13 和 17...
Nr.7、13 和 17 不起作用,因为 "Some required packages are not referenced by the project"。我还没弄明白那是什么意思。
Nr.4 不起作用,因为 "The type or namespace name 'ActionBarActivity' could not be found (are you missing a using directive or an assembly reference?) C:\progge\Apper\AkvaApp\AkvaApp\AkvaApp\Browser.cs"... 即使 ActionBarActivity 应该包含在组件中。
我一次又一次地建造和重建。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Support.V4;
using Xamarin;
namespace AkvaApp
{
[Activity(Label = "Browser")]
public class Browser : ActionBarActivity, ActionBar.ITabListener
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SupportRequestWindowFeature(WindowCompat.FeatureActionBar);
ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
SetContentView(Resource.Layout.BrowserLayout);
ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
ActionBar.Tab tab = ActionBar.NewTab();
tab.SetText(Resources.GetString(Resource.String.SearchTabText));
tab.TabSelected += (sender, args) =>
{
Android.Util.Log.Info(this.Class.Name, "this is an info message");
Android.Util.Log.Warn(this.Class.Name, "this is a warning message");
Android.Util.Log.Error(this.Class.Name, "this is an error message");
};
}
public void OnTabReselected(ActionBar.Tab tab, FragmentTransaction ft)
{
throw new NotImplementedException();
}
public void OnTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
{
throw new NotImplementedException();
}
public void OnTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)
{
throw new NotImplementedException();
}
}
}
为什么?
您需要将 nuget 包添加到 Support Library v7 AppCompat 才能使用 ActionBarActivity。 Xamarin 的 James Montemagno 解释了这一点:http://blog.xamarin.com/android-support-library-v7-hello-actionbarcompat/
如果您想知道为什么会出现 "Some required packages are not referenced by the project",您应该查看程序包控制台以了解实际错误消息的内容。
ActionBarActivity 是 Martijn 提到的支持库 v7 AppCompat 的一部分
https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html
- 创建一个新的 Xamarin.Android 空白项目(确保目标框架设置为 API 21)
- 通过 Nuget 安装 Android 支持库 v7 AppCompat - https://www.nuget.org/packages/Xamarin.Android.Support.v7.AppCompat/
- 将
Android.App.ActionBar
替换为ActionBar
,因为您正试图从静态上下文访问它。 - 请注意,ActionBar TabListener 是
deprecated
,您应该改用其他模式(http://developer.android.com/design/patterns/navigation.html)
我仍然没能在 Visual Studio 中让它工作,但我在 Xamarin Studio 中做到了。 在 Visual Studio 中添加支持库 v7 根本没有帮助,但在 Xamarin Studio 中添加它修复了它。
对于 Xamarin Studio: 右键单击项目(不是解决方案),单击“添加”->“添加 NuGet 包”,搜索 "support library v7",勾选 AppCompat,然后单击“添加包”。 然后在需要这个库的class中,添加"using Android.Support.V7;"