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について書いて行こうと思います