T

Android開発でハマッたところを徒然なるままに

imageプロパティのパスがおかしい

imageViewとかのimageプロパティはiOSと違って「/path/to/image.png」みたいに先頭をスラッシュにしてあげないと何も表示されない。ただしbackgroundImageは「path/to/image.png」で通じる。

難易度:1

Android 4には対応していない

ドキュメントにあるように、Titanium Mobileは1.8.2時点ではまだAndroid 4には対応していない。意味不明のエラーになることがある。例えばcreatePickerでtypeプロパティにTitanium.UI.PICKER_TYPE_TIMEを指定すると落ちる。

難易度:2

ActivityIndicatorの挙動が違う

iOSでは、ActivityIndicatorはそれをaddしたviewやwindowオブジェクトが消えれば画面から消えるが、Androidの場合はhide()を呼び出してやらないと表示されたままになる。

難易度:2

IS03ではdialogはwindowにaddしないといけない

他の機種で動作していたとしても、IS03ではcreateDialogしたdialogオブジェクトが表示されないことがある。この場合、前面にあるwindowオブジェクトにaddすると表示される。

難易度:3

tagGroupを使うとアプリが終了しない

Ti.Android.currentActivity.finish();をコールしてもアプリが終了しない。tabGroup.close();を呼び出すとズドンと終了する。

もっとも、AndroidアプリはActivityの停止を呼び出しても、それは停止してもいいとフラグを立てるようなものなので、必ずしも停止するとは限らない(けど実質的には停止する…)ので要注意。

難易度:4

window.open();で別スレッドになることがある?

createWindowしたオブジェクトにイベントリスナを追加して、その前に開いていた画面を裏で閉じたり変更したりするとき、ぬるぽで落ちることがあった。どうやらtab.open(win);ではなくwin.open();だと別スレッドになることがあるらしい。ちなみにコードは正しくiOSでは必ず動作する。

難易度:4

imageViewの画像が更新されない

一度画面に表示したimageViewのプロパティを外部からいじっても更新されないことがある。image_view.image = ‘/path/to/new_image.png’;のように記述しても必ずしも更新してくれるわけではない。こちらもコードは正しくiOSでは必ず動作する。同じコードでAndroid対応するとimageView自体を消して作り直すなど根本的な変更が必要になる。

詳細を調べきれていないので申し訳ない。

難易度:5

Distribute用ビルドのJSファイルのコンパイル機能がおかしい

Distribute用ビルドでは「var object = {};」がコンパイルエラーになる。「var object = new Object();」なら通る。

難易度:5+

Posted by on 4月 16, 2012 in Android, Titanium

コメントを残す