.Net MauiでAndroidのEdgeToEdgeに対応する
.Net MauiでAndroidのEdgeToEdgeに対応する
Androidアプリをリリースしている人であればご存知だと思いますが、アプリを公開しておくためには常に最新OSに対応しておかないといけません。
なので私も最新のAndroid15に対応するべく、アプリ改修をしていたのですが、一つ問題が生じました。。
それは、
EdgeToEdgeが有効になることで、端末の時刻などが表示されている画面上部までアプリ内容を表示できるようになる反面、しっかりアプリ側が対応していないとレイアウトの一部が被ってしまい、正常に動作しなくなってしまったります。
特に私はNavigationBarを表示させていることもあり、画面遷移後の戻るボタンが動作しなくなったり、ツールバーが押せなくなったりしてしまいました。
EdgeToEdgeに対応する
調べていると色々な対応方法が紹介されているのですが、.Net Mauiに対応したものがなく、それっぽく記述しようとしてもコンパイルエラーになりました。
その中で最終的にうまく行った方法を紹介します。
結論として、かなり無理矢理感があり、NavigationBarの表示文字がカメラに被ってしまっているなどの問題もあるのですが、よければ参考にしてください。。
参考にしたサイト:こちら
下記のコードをPlatform/Android配下のMainActivity.csに転記します。
public class MainActivity : MauiAppCompatActivity { protected override void OnCreate(Bundle? savedInstanceState) { base.OnCreate(savedInstanceState); WindowCompat.SetDecorFitsSystemWindows(this.Window, false); WindowInsetsControllerCompat windowInsetsController = new WindowInsetsControllerCompat(this.Window, this.Window.DecorView); // Hide system bars windowInsetsController.Hide(WindowInsetsCompat.Type.SystemBars()); windowInsetsController.SystemBarsBehavior = WindowInsetsControllerCompat.BehaviorShowTransientBarsBySwipe; } }これを記述することで、Android SDK34以下でもEdgeToEdgeを有効にして、端末の時刻などを表示する部分を非表示にすることができます。
これにより、全体的にアプリレイアウトが画面上部に寄ることにはなるのですが、NavigationBarが被さることはなくなり、意図した機能を動作させることができます。
可能であれば、端末時刻などを残したまま、その下部分からアプリレイアウトを作成したいのですが、現状は対応策がないのでこれで良しとします。。
さいごに
今回はAndroidのEdgeToEdgeに対応する方法を使用しました。
Googleさんの方針なので仕方がないですが、こういったアプリ開発者を悩ませる機能をデフォルトで有効にするのはやめてほしいです。。
せめて、オフにする機能やその方法を公式がまとめてほしいですね。。まぁそもそも.Net MAUIを使っているのが悪い気もするのですが。。
とりあえずAndroid SDK35でも正常動作するようになったので、これをリリースして行きたいと思います。
空き時間を見つけながら、他の対応方法を探していきたいと思います。
今回はこのへんで、ではまた!
コメント
コメントを投稿