C# Xamarin Forms: 导航栏图标未显示

4

我刚刚从默认的(app.cs)模板创建了一个便携式应用程序,没有更改任何代码(尽管似乎我必须更新Xamarin.Forms以修复启动异常),然后运行它。我得到了这个结果(没有显示图标):

enter image description here

为了更加详细,这里是代码(与模板相比没有任何更改):

namespace App3
{
    public class App : Application
    {
        public App()
        {
            // The root page of your application
            var content = new ContentPage
            {
                Title = "App3",
                Content = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Children = {
                        new Label {
                            HorizontalTextAlignment = TextAlignment.Center,
                            Text = "Welcome to Xamarin Forms!"
                        }
                    }
                }
            };

            MainPage = new NavigationPage(content);
        }

安卓项目,主活动:

[Activity(Label = "App3", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);

        global::Xamarin.Forms.Forms.Init(this, bundle);
        LoadApplication(new App());
    }
}

然而,当我从Petzold的书中运行ModelessAndModel应用程序(第24章,源代码可以在这里找到)时,我会得到这个(显示图标!):

enter image description here

代码中没有什么特别的。app.cs:

   public class App : Application
    {
        public App()
        {
            MainPage = new NavigationPage(new MainPage());
        }
...

MainPage.cs:

namespace ModelessAndModal
{
    public class MainPage : ContentPage
    {
        public MainPage()
        {
            Title = "Main Page";

            Button gotoModelessButton = new Button
            {
                Text = "Go to Modeless Page",
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.CenterAndExpand
            };
            gotoModelessButton.Clicked += async (sender, args) =>
            {
                await Navigation.PushAsync(new ModelessPage());
            };

            Button gotoModalButton = new Button
            {
                Text = "Go to Modal Page",
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.CenterAndExpand
            };
            gotoModalButton.Clicked += async (sender, args) =>
            {
                await Navigation.PushModalAsync(new ModalPage());
            };

            Content = new StackLayout
            {
                Children =
                {
                    gotoModelessButton,
                    gotoModalButton
                }
            };
        }
    }
}
[Activity(Label = "ModelessAndModal", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        global::Xamarin.Forms.Forms.Init(this, bundle);
        LoadApplication(new App());
    }
}

我相信这是一件简单的事情,但我似乎找不到关键的区别。如何让我的应用程序在导航窗格中显示图标?

1
我认为这两者的区别可能在于Petzold的示例使用FormsApplicationActivity,而新模板将FormsAppCompatActivity作为MainActivity的基类。 - jgoldberger - MSFT
这对我有用(我的图标恰好是透明的): https://stackoverflow.com/questions/55188043/xamarin-navigation-bar-has-unwanted-default-icon-impossible-to-alter-or-remove/55188439#55188439 - Gerry
2个回答

7

对于使用FormsAppCompatActivity的表单应用程序,我认为在Android应用程序项目中的Toolbar的.axml文件中添加图标的方法是正确的。新模板表单应用程序中工具栏的默认布局为:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

但是,您可以添加控件,例如添加图标:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:popupTheme="@style/ThemeOverlay.AppCompat.Light" >
    <ImageView
        android:src="@drawable/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />
</android.support.v7.widget.Toolbar>

如果有更好的方法,我还没有找到。

已测试并且可行。我很乐意尝试其他方法,但是这种方式有效,所以我对它感到非常满意。 - James John McGuire 'Jahmic'
1
但这不是同一件事。这会为所有页面添加它。如果您只想为一个页面添加图标怎么办? - Emil
实际上这是同样的事情。当使用FormsAppCompatActivity作为Android MainActivity的基类时,默认情况下图标永远不会显示,因此这个答案解决了这个问题。你所问的是一个不同的问题,请发布一个新的问题。 - jgoldberger - MSFT
那个问题已经在这里被问过了:https://stackoverflow.com/questions/42180189/navigationpage-settitleicon-works-on-ios-but-not-android/42181176?noredirect=1#comment75754290_42181176。我很想得到一个答案。在那之前,我们的Android应用看起来不如iOS好看。 - Eliot Gillum

0
"

“app:logo” 也适用于 FormsAppCompatActivity:

"
    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
    ...
        app:logo="@drawable/icon" />

但是“app:navigationIcon”仍然无法工作(Xamarin.Forms 2.3.4.270)


这个很好用!但是如果你这样做,就无法控制图标的位置(例如水平居中)。此外,您需要添加以下行才能使其正常工作: xmlns:app="http://schemas.android.com/apk/res-auto" - goemic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接