首页 > 解决方案 > 按 ID 查找视图(Resource.Id.toolbar) 返回 null

问题描述

我使用这个例子: https ://github.com/UdaraAlwis/Xamarin-Playground/tree/master/XFNavBarBackBtnClickOverride 。

但是 FindViewById(Resource.Id.toolbar) 返回null。在新项目中,此示例有效。在我的项目不工作。我还能检查什么?

MainAcitvity.cs

protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            Xamarin.Essentials.Platform.Init(this, bundle);
            Forms.Init(this, bundle);

            CrossCurrentActivity.Current.Init(this, bundle);
            Rg.Plugins.Popup.Popup.Init(this, bundle);
            ToastNotification.Init(this);
            Xamarin.FormsMaps.Init(this, bundle);

            DependencyService.Register<ToastNotification>();

            LoadApplication(new App());

            Toolbar toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);
        }

工具栏.xml

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

样式.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>

  <style name="MainTheme" parent="MainTheme.Base">
  </style>
  <style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="windowNoTitle">true</item>

    <item name="windowActionBar">false</item>

    <item name="colorPrimary">#2196F3</item>

    <item name="colorPrimaryDark">#1976D2</item>

    <item name="colorAccent">#172239</item>

    <item name="windowActionModeOverlay">true</item>

    <item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item>

    <item name="android:textAllCaps">false</item>
  </style>

  <style name="AppCompatDialogStyle" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">#FF4081</item>
  </style>

  <color name="ListViewHighlighted">@layout/gradient</color>
</resources>

标签: xamarin.formsxamarin.android

解决方案


以下行

Toolbar toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);

当您没有将工具栏定义为Android.Support.V7.Widget.Toolbar时,它将被初始化为Android..Widget.Toolbar。因此该方法FindViewById永远不会在 xml 中找到工具栏。

而是将其作为以下行。

Android.Support.V7.Widget.Toolbar toolbar  = this.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);

您需要MainPage在 app.xaml.cs 中将其设置为 NavigationPage。

MainPage = new NavigationPage(new xxxPage());

推荐阅读