Toolbarの表示

Toolbarの表示について書こうと思います。

C# - Xamarin.AndoridでToolbarの表示(88458)|teratail

質問をここに投げていましたが自己解決しました。

https://developer.xamarin.com/guides/android/user_interface/toolbar/part-1-replacing-the-action-bar/
最初はここを参考に書こうと思っていたのですが、全然動かない という状態になりました。

調べたら現在はToolbarからandroid.support.v7.widget.Toolbarに変更されているようです。で、このandroid.support.v7.widget.ToolbarですがXamarin標準では入っていないようです.

そこでNugetからXamarin.Android.Support.V7.AppCompatをインストールしてきます。 ちなみにXamarin.Android.Support.Designを入れるといろいろインストールされるの便利です(?) 入れたあとにクリーンとビルドするがおすすめ

本題

layout\Main.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
    <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_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</LinearLayout>

values\styles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
    <style name="MyTheme" parent="MyTheme.Base">
    </style>
    <style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="colorPrimary">#2196F3</item>
        <item name="colorPrimaryDark">#1976D2</item>
        <item name="colorAccent">#FF4081</item>
    </style>
</resources>

values-v21\stles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
    <style name="MyTheme" parent="MyTheme.Base">
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowReturnTransitionOverlap">true</item>
        <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
        <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
    </style>
</resources>

MainActivity.cs

using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Toolbar = Android.Support.V7.Widget.Toolbar;

namespace App2.Droid
{
    [Activity (Label = "App2.Android", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : AppCompatActivity
    {

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

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            Toolbar toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);
            SupportActionBar.Title = "My Toolbar";
        }
    }
}

これだけで動きそう…

Unhandled Exception:

Java.Lang.IllegalArgumentException: AppCompat does not support the current theme features: { windowActionBar: false, windowActionBarOverlay: false, android:windowIsFloating: false, windowActionModeOverlay: false, windowNoTitle: false } occurred

残念でした.デプロイ時SetContentViewで例外が発生して動かない

対策

Androidのトレーニングサイト(https://developer.android.com/training/appbar/setting-up.html)に次のように書かれていました

<application
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    />

これをAndroidManifestに書けば動く!? ビルド時にエラーが出ましたね

Working with AndroidManifest.xml - Xamarin
ここを見るとapplicationタグはAssemblyInfoに書けばいいみたいです。

[assembly: Application(Theme = "@style/Theme.AppCompat.Light.NoActionBar")]

今回苦しんだ点

Andoridの知識のなさが今回一番苦しみました。もっとAndoridと仲良くなるためにもう1台端末がほしいな()
あとXamarini.Androidが更新されていないというにも苦しみましたね。 今後どんどんXamarin.Andoirdについて書いて行こうと思います