工具栏不会出现在Xamarin.Android中

时间:2017-01-06 23:11:35

标签: android xamarin xamarin.android

我正在尝试用工具栏替换ActionBar,但工具栏没有显示。我不明白为什么没有工具栏我的页面仍然是空白的,我缺少什么?

我的风格:

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

我的toolbar.axml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@+id/toolbar"
  android:layout_height="wrap_content"
  android:minHeight="?attr/actionBarSize"
  android:background="?attr/colorPrimary"
  android:layout_width="match_parent">

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/toolbartitile"
    android:text="Kodej"/>

</android.support.v7.widget.Toolbar>

我的活动:

[Activity(Label = "MainLoginActivity" , Theme = "@style/MyThemeActionBar")]
public class MainLoginActivity : AppCompatActivity
{
    private ISharedPreferences sp;
    private Android.Support.V7.Widget.Toolbar toolbar;

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

        SetContentView(Resource.Layout.MainLogin);

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

        sp = GetSharedPreferences(null, FileCreationMode.Private);

        TextView tv = FindViewById<TextView>(Resource.Id.emailMain);
        tv.Text = sp.GetString("email", null);

        tv.Click += (object sender, EventArgs e) =>
        {
            Android.Support.V7.App.AlertDialog.Builder ad = new Android.Support.V7.App.AlertDialog.Builder(this);

            ad.SetTitle("Logout");
            ad.SetMessage("Are you sure you want to logout");

            ad.SetPositiveButton("Yes", (senderAlert, args) => 
            {
                ISharedPreferencesEditor editor = sp.Edit();
                editor.Remove("email");
                editor.Apply();

                StartActivity(typeof(MainActivity));

                Finish();
            });

            ad.SetNegativeButton("Cancel", (senderAlert, args) => {});

            Dialog dialog = ad.Create();
            dialog.Show();
        };

    }
}

1 个答案:

答案 0 :(得分:2)

我认为问题可能在于代码:

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

由于您未发布MainLogin布局的代码,因此当您在MainLoginActivity中对此代码进行编码时,上下文为MainLoginActivity,您应该确保有Android.Support.V7.Widget.Toolbar {1}} toolbar布局中存在哪个ID为MainLogin,否则会返回null,并且SetSupportActionBar(toolbar);时不会引发异常。{1}}

要解决此问题,您可以:

  1. Toolbar的布局移至MainLogin布局。

  2. 或者将Toolbar保留在工具栏布局中,但在MainLogin布局中使用它,例如:

  3. MainLogin布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
      <include android:id="@+id/toolbar"
               layout="@layout/mytoolbar" />
    </LinearLayout>