【问题标题】:c# Xamarin Forms: NavigationPage icon not showingc# Xamarin Forms:NavigationPage 图标未显示
【发布时间】:2016-10-15 09:29:54
【问题描述】:

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

为了彻底,这里是代码(再一次,模板没有任何变化):

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);
        }

Droid 项目,主要活动:

[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 章的源代码可以找到 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
                }
            };
        }
    }
}

机器人项目 MainActivity.cs:

[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());
    }
}

我敢肯定,这很简单,但我似乎找不到关键的差异。 如何让我的应用在导航窗格中显示图标?

【问题讨论】:

  • 我认为不同之处可能在于 Petzold 的示例使用 FormsApplicationActivity 而新模板使用 FormsAppCompatActivity 作为 MainActivity 的基类。
  • 这对我有用(我的图标恰好是透明的):stackoverflow.com/questions/55188043/…

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


【解决方案1】:

对于使用FormsAppCompatActivity 的Forms 应用,我相信在工具栏上添加图标的方法是在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>

如果有更好的方法来做到这一点,我还没有找到。

【讨论】:

  • 经过测试并且可以正常工作。我对其他方法持开放态度,但这种方法很有效,所以,我很满意
  • 但这不是一回事。这会为所有页面添加它。如果您只想为 1 页添加图标怎么办?
  • 其实是一样的。当使用 FormsAppCompatActivity 作为 Android MainActivity 的基类时,该图标默认不会显示,因此此答案解决了该问题。你问的是一个不同的问题,所以请发布一个新问题。
  • 该问题已在此处提出:stackoverflow.com/questions/42180189/…。我很想得到一个答案。在那之前,我们的 Android 应用看起来还不如 iOS。
【解决方案2】:

"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="schemas.android.com/apk/res-auto"
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多