68
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Retty Inc.Advent Calendar 2017

Day 11

Android機種依存動作まとめ

Posted at

この記事はRetty Advent Calendar 2017 における 11日目の記事です。
昨日は @tkngueデータベースレス で サーバーレス な 社内図書システムをGoogle App Script (GAS) で作ってみる でした。

はじめに

RettyでAndroidエンジニアをやっている福井です。

Android開発をしていている皆様、いかがお過ごしでしょうか?2017年も終わろうとしていますが相変わらず機種依存と戦っていることだと思います。私は戦っています :crossed_swords:
機種依存は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 にアップデートしたらクラッシュするようになりました :thinking:
バージョンに応じたリソースディレクトリ (values-v19/など) を作成し、この中でのみ該当attributeを使うことでクラッシュを回避することができます。サボらずちゃんとやりましょうってことですね。

AQUOS かつ OS ver 4.0.1

Unicode

Unicode e640e760まで端末側の定義が存在しているようです。アプリでアイコンフォントを設定してもそちら側が参照されず 必ず端末側が優先されるようです。 ちなみにこの辺りは星座の絵文字:pisces: :virgo: が登録されていました。該当機種だけweb viewのある画面が星占いみたいになっていました :innocent:
アプリでunicodeを設定する場合は e640e760を避けたほうが良さそうです。

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」です。お楽しみに!

68
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?