アンドロイド用アプリの開発を再開。最近流行のハイブリッドアプリによる開発は断念した。もう1~2年すれば環境が整いそうだけど、思っていたよりサクサク動いてくれないので(私はとても気が短いのだ)結局ネイティブアプリに取り組むことにした。
で、フォーマットされた文字列を表示するのにWebViewを使うことにしたのだが、アクティビティに背景画像を設定し、それを透過させたいのに、webView.setBackgroundColor(Color.TRANSPARENT); をしても背景が白色になって透過してくれない。調べてみるとWebView css style background-color:transparent ignored on android 2.2にいろいろ回避方法が紹介されていた。これさえやっておけば万事解決!っていう方法がないのが実にアンドロイドらしい(涙)。
私の手元であれやこれやと試してみてうまくいったのは次の方法だった。
- アクティビティのonCreateで webview.loadDataWithBaseURL(null, data, “text/html”, “UTF-8”, null) の後に webview.setBackgroundColor(Color.TRANSPARENT);を追加
- AndroidManifest.xml のアクティビティに android:hardwareAccelerated=”false” を追加
上記の2つを設定することでうまくいった。ロードするHTMLのHTMLタグやBODYタグの style=”background-color:transparent” は設定しなくても問題なかった。上掲の掲示板ではlayoutファイルに android:background=”@android:color/transparent”とandroid:layerType=”software” を設定する、とあったが、これもしなくても大丈夫だった。API 11以上だと webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); というのもあるらしい。もうなにがなんだか。