fc2ブログ

記事一覧

新しいスプラッシュスクリーンに対応する方法 -Android 12 (S)- | Xamarin.Forms


Android 12 (S) からは OS 独自のスプラッシュスクリーンが表示されるようになります。しかもアプリのアイコンがそのまま表示される仕様ですので、ブランディングには不向きなスプラッシュスクリーンとなっていて、改悪です。

Googleのサイトに新しいスプラッシュスクリーンの対応方法が記載されていますが、独自のスプラッシュスクリーンを生かす内容となっていないため、あまり参考になりませんでした。
https://developer.android.com/guide/topics/ui/splash-screen/migrate?hl=ja

また、独自のスプラッシュスクリーン(従来のスプラッシュスクリーン)を実装しているアプリでは、新しいスプラッシュスクリーンが表示された後に、独自のスプラッシュスクリーンが表示されるようで、全くもって不要の産物となります。

尚、独自のスプラッシュスクリーンを実装する方法は以前の記事「スプラッシュスクリーンをAndroidで表示する方法」をご参考ください。



前提条件
・Windows10 Pro 64Bit 1903
・Visual Studio 2022 Community v17.3.6
・Xamarin 17.3.0.308 (NuGet Xamarin.Forms 4.6.0.1141)
ターゲットフレームワークを Android 12 (S) (API 31) に変更すること



1.対応方法その1

styles.xml で android:windowIsTranslucent を true に設定します。他にもwindowSplashScreenBackground や windowSplashScreenAnimatedIcon の設定が存在するようですが、Transparent に設定しても効果がありませんでした。

Resources\values\styles.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@drawable/splash_screen</item>
<!--Android12以降のスプラッシュスクリーンを無効にする-->
<item name="android:windowIsTranslucent">true</item>
<!--色々試した結果、以下は効果のない設定と思う
<item name="windowSplashScreenAnimationDuration">0</item>
<item name="windowSplashScreenAnimationDuration">1000</item>
<item name="windowSplashScreenBackground">@color/transparent</item>
<item name="windowSplashScreenAnimatedIcon">@color/transparent</item>
<item name="android:backgroundDimEnabled">false</item>
-->
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowActionBar">true</item>
</style>
</resources>


2.対応方法その2

NuGetパッケージの AndroidX.Core.SplashScreen をインストールします。

Android12_06_AndroidX_Core_SplashScreen.png


そして、従来のスプラッシュスクリーンの Activity クラスに、SplashScreen.InstallSplashScreen 実装します。これにより、新しいOSのスプラッシュスクリーンを従来のスプラッシュスクリーンに紐づけることができます。

SplashActivity.cs
[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true,
Name = "com.CompanyName.AppName.SplashActivity",
Exported = true,
NoHistory = true)]
public class SplashActivity : AppCompatActivity
{
public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
{
AndroidX.Core.SplashScreen.SplashScreen screen = AndroidX.Core.SplashScreen.SplashScreen.InstallSplashScreen(this);
base.OnCreate(savedInstanceState, persistentState);
}
}

※ 他にも ViewTreeObserver.IOnPreDrawListener を使用してレンダリングを遅らせる対応方法が必要との記事がありますが、当方で検証した結果では必要が無いと判断していますので、当記事では紹介しません。




以上で、Android 12 S に対応した従来のスプラッシュスクリーンが表示できました。





最後までお読みいただきありがとうございます。
当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
https://itblog.dynaspo.com/blog-entry-81.html


関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。