この記事はRetty Advent Calendar 2017 における 11日目の記事です。
昨日は @tkngue のデータベースレス で サーバーレス な 社内図書システムをGoogle App Script (GAS) で作ってみる でした。
はじめに
RettyでAndroidエンジニアをやっている福井です。
Android開発をしていている皆様、いかがお過ごしでしょうか?2017年も終わろうとしていますが相変わらず機種依存と戦っていることだと思います。私は戦っています
機種依存はAndroid開発をする以上避けて通れない問題かと思いますが、なかなか一覧でまとめられている記事を見かけない気がしたので作りました。Rettyに入社してからの2年半で私が出会った機種依存のあれこれです。それではどうぞ。
機種依存挙動
AQUOS かつ OS ver 4.1.2
android:windowTranslucentStatus
windowTranslucentStatus はAPI Level 19から追加されたattributeです。ほとんどのAPI Level 19以下のOSバージョンの端末でこのattributeはスルーされますが、AQUOS かつ OS ver 4.1.2 (API Level 16) の場合は クラッシュが発生します。(なぜか同じ端末でも 4.0.1
の時は問題が発生せず、 4.1.2
にアップデートしたらクラッシュするようになりました )
バージョンに応じたリソースディレクトリ (values-v19/
など) を作成し、この中でのみ該当attributeを使うことでクラッシュを回避することができます。サボらずちゃんとやりましょうってことですね。
AQUOS かつ OS ver 4.0.1
Unicode
Unicode e640
〜e760
まで端末側の定義が存在しているようです。アプリでアイコンフォントを設定してもそちら側が参照されず 必ず端末側が優先されるようです。 ちなみにこの辺りは星座の絵文字 が登録されていました。該当機種だけweb viewのある画面が星占いみたいになっていました
アプリでunicodeを設定する場合は e640
〜e760
を避けたほうが良さそうです。
Fujitsu (F-02E)
shapeのデフォルト色が透過ではなく黒
xmlで shape
タグを用いてdrawableを作成するときにデフォルト色が透過ではなく黒でした。
例えば枠線だけの画像を記述するときに、何色で塗りつぶすか指定を忘れると「真っ黒の塗りつぶしに枠線がついた画像になっています。
(他の機種で見た時は枠線だけが見える画像になります。)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="1dp"
android:color="@color/my_color" />
</shape>
忘れずに透過で塗りつぶす記載をすることで回避できます。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/transparent" />
<stroke android:width="1dp"
android:color="@color/font_color_sm" />
</shape>
Fujitsu (F-01F)
ListView#addFooterView()
ListViewにfooterを設定する際に、 adapterをセットした後にfooterをセットすると無視されます。
// これは動かないけど
this.listView.adapter = adapter
this.listView.addFooterView(footerView)
// これなら動く
this.listView.addFooterView(footerView)
this.listView.adapter = adapter
Xperia (D5803)
String.trim()
通常こちらのメソッドは全角空白文字はtrimの対象外かと思いますが、なぜか全角空白文字もtrimされちゃいました。AndroidっていうかJavaじゃん…嘘だろ…
最近のXperiaはちゃんと半角のみtrimしてくれます。確かZ3 Compactくらいまではこのような挙動になっていた記憶があります。
おわりに
いかがでししたか?最近発売された端末ではだんだん機種依存動作を見なくなりましたが、多くのサービスで数年前に発売された端末もサポートしていると思います。共に機種依存と戦うみなさまの一助になれば幸いです。それではHappy Coding!
明日は @yongyu-li の「ReactNativeのFlatList vs ListView」です。お楽しみに!