【问题标题】:Floating action button: Error inflating class FloatingActionButton浮动操作按钮:膨胀类 FloatingActionButton 时出错
【发布时间】:2016-10-16 16:30:05
【问题描述】:

我正在尝试使用 NuGet FAB.Forms 包 (github) 中的 xamarin.forms 中的浮动操作按钮。我试图使我的代码类似于Sample 文件夹中提供的示例

Xamarin.Droid MainActivity.cs 文件

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);

    global::Xamarin.Forms.Forms.Init(this, bundle);

    FAB.Droid.FloatingActionButtonRenderer.InitControl();

    LoadApplication(new App());
}

Xamarin.ios AppDelegate.cs 文件

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    global::Xamarin.Forms.Forms.Init();

    FAB.iOS.FloatingActionButtonRenderer.InitControl();

    LoadApplication(new App());

    return base.FinishedLaunching(app, options);
}

Xamarin.portable App.cs 文件

public App(){MainPage = new LatestNews();}

LatestNews.xaml 文件

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:fab="clr-namespace:FAB.Forms;assembly=FAB.Forms"
             x:Class="HuraApp.Pages.LatestNews">
    ...
    <fab:FloatingActionButton
              x:Name="fabBtn"
              Source="plus.png"
              Size="Normal"
              Clicked="Handle_FabClicked"
              NormalColor="Green"
              RippleColor="Red" />
    ...
</ContentPage>

LatestNews.xaml.cs 文件

void Handle_FabClicked(object sender, System.EventArgs e)
{
    this.DisplayAlert("Floating Action Button", "You clicked the FAB!", "Awesome!");
}

可移植的packages.config文件

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="FAB.Forms" version="2.1.1" targetFramework="portable45-net45+win8+wpa81" />
  <package id="Microsoft.Bcl" version="1.1.10" targetFramework="portable45-net45+win8+wpa81" />
  <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="portable45-net45+win8+wpa81" />
  <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="portable45-net45+win8+wpa81" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="portable45-net45+win8+wpa81" />
  <package id="sameerIOTApps.Plugin.SecureStorage" version="1.2.1" targetFramework="portable45-net45+win8+wpa81" />
  <package id="Xam.Plugin.Media" version="2.3.0" targetFramework="portable45-net45+win8+wpa81" />
  <package id="Xamarin.Forms" version="2.3.2.127" targetFramework="portable45-net45+win8+wpa81" />
  <package id="Xamarin.Forms.Maps" version="2.3.2.127" targetFramework="portable45-net45+win8+wpa81" />
</packages>

droid package.config 文件

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="FAB.Forms" version="2.1.1" targetFramework="monoandroid60" />
  <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="monoandroid60" />
  <package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
  <package id="Xamarin.Android.Support.Design" version="23.3.0" targetFramework="monoandroid60" />
  <package id="Xamarin.Android.Support.v4" version="23.3.0" targetFramework="monoandroid60" />
  <package id="Xamarin.Android.Support.v7.AppCompat" version="23.3.0" targetFramework="monoandroid60" />
  <package id="Xamarin.Android.Support.v7.CardView" version="23.3.0" targetFramework="monoandroid60" />
  <package id="Xamarin.Android.Support.v7.MediaRouter" version="23.3.0" targetFramework="monoandroid60" />
  <package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid60" />
  <package id="Xamarin.Android.Support.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
  <package id="Xamarin.Forms" version="2.3.2.127" targetFramework="monoandroid60" />
  <package id="Xamarin.Forms.Maps" version="2.3.2.127" targetFramework="monoandroid60" />
  <package id="Xamarin.GooglePlayServices.Base" version="29.0.0.1" targetFramework="monoandroid60" />
  <package id="Xamarin.GooglePlayServices.Basement" version="29.0.0.1" targetFramework="monoandroid60" />
  <package id="Xamarin.GooglePlayServices.Maps" version="29.0.0.1" targetFramework="monoandroid60" />
</packages>

iOS package.config 文件

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="FAB.Forms" version="2.1.1" targetFramework="xamarinios10" />
  <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="xamarinios10" />
  <package id="Xamarin.Forms" version="2.3.2.127" targetFramework="xamarinios10" />
  <package id="Xamarin.Forms.Maps" version="2.3.2.127" targetFramework="xamarinios10" />
</packages>

但是当我在 android 模拟器上运行应用程序时,它给了我错误消息

`Android.Views.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class android.support.design.widget.FloatingActionButton`

为什么会这样?我错过了什么?我该如何解决这个问题?

【问题讨论】:

  • 你用Activity扩展MainActivity吗??
  • 我在 c# xamarin.forms 而非 android 中编码。我的 (Activities/Pages) 正在扩展 ContentPage
  • 啊,是的,在 iO 上运行没有任何问题?
  • 我还没有在 iOs 上运行它。我现在专注于机器人部分。
  • 请把你的全班 MainActivity.cs。和 packages.config.

标签: c# xamarin.forms floating-action-button


【解决方案1】:

我有类似的问题,但我使用的是 Android。只需将项目父主题更改为任何 Theme.AppCompat~,这解决了我的问题,也许你也解决了。并将global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 添加到您的MainActivity.cs

[Activity(Label = "YourName", , Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
        public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
        {
            protected override void OnCreate(Bundle bundle)
            {
                base.OnCreate(bundle);

                global::Xamarin.Forms.Forms.Init(this, bundle);

                FAB.Droid.FloatingActionButtonRenderer.InitControl();

                LoadApplication(new App());
            }
        }

您可以在style.xml中添加这样的主题

<style
        name="MyTheme"
        parent="Base.AppTheme">
</style>

<style name="Base.AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 <item name="windowActionBar">false</item>
 <item name="windowNoTitle">true</item>
</style>

【讨论】:

  • 您的代码解决了该错误,但给了我一个 NullReferenceException。我能够从here 的两个建议中解决错误。但解决该问题导致另一个错误Java.Lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
  • (像往常一样)感谢SO answer,我能够解决我的问题。我在我的主题样式中添加了&lt;item name="windowActionBar"&gt;false&lt;/item&gt;&lt;item name="windowNoTitle"&gt;true&lt;/item&gt;。 @mww 一旦您修改它以解决我遇到的错误,我很乐意接受您的回答。再次感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多