2016-10-15 3 views
3

Я только что создал переносное приложение из шаблона по умолчанию (app.cs), не изменил ни один из кода (хотя мне кажется, что мне нужно было обновить Xamarin.Forms, чтобы исправить исключение запуска) и побежал. Я получил это (без значка показа):C# Xamarin Forms: значок NavigationPage не отображается

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

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

Однако, когда я запустить приложение ModelessAndModel из книги Петцольда (глава 24 источника можно найти here), я получаю это (Icon showin г):

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

дроид проекта 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()); 
    } 
} 

Я уверен, что это что-то простое, но я не могу похоже, обнаруживают, что такое ключевое различие. Что нужно, чтобы мое приложение отображало значок в навигационной панели?

+0

Я думаю, что разница может быть, Образец Петцольда использует «FormsApplicationActivity», а новые шаблоны используют «FormsAppCompatActivity» в качестве базового класса для «MainActivity». – jgoldberger

ответ

6

Для приложения Forms, использующего FormsAppCompatActivity, я считаю, что способ добавить значок на панель инструментов - это сделать это в файле .axml для панели инструментов в проекте приложения для Android. раскладка по умолчанию на панели инструментов в новый шаблон форм приложение является:

<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> 

Если есть лучший способ сделать это, мне еще предстоит его найти.

+0

Протестировано и работает. Я совершенно открыт для других способов сделать это, но так работает. Итак, я вполне доволен этим. – Jahmic

+1

Но это не одно и то же. это добавляет его для всех страниц. что, если вы хотите добавить значок только для 1 страницы? – batmaci

+0

На самом деле это одно и то же. Значок никогда не отображается по умолчанию при использовании 'FormsAppCompatActivity' в качестве базового класса для Android« MainActivity », поэтому этот ответ разрешил эту проблему. То, что вы задаете, - это другой вопрос, поэтому, пожалуйста, напишите новый вопрос. – jgoldberger

0

"приложение: логотип" также работает с FormsAppCompatActivity:

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

но "приложение: navigationIcon" до сих пор не работает (Xamarin.Forms 2.3.4.270)

+0

Это прекрасно работает! Но если вы сделаете это так, вы не сможете управлять положением значка (например, по горизонтали по центру). Также вам нужно добавить следующую строку, чтобы заставить ее работать: xmlns: app = "http://schemas.android.com/apk/res-auto" – goemic

Смежные вопросы