FC2ブログ
カレンダー

10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

月別アーカイブ

全記事表示リンク

全ての記事を表示する

最新コメント

最新トラックバック

スポンサーサイト

--------

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告

Titanium、AndroidでTableViewとSearchBarが連携できない

2013-03-06

トラブルついでに現状つかんでいる問題について・・・

Titanium、Androidで"TableView"の"search"プロパティに
"SearchBar"オブジェクトを設定すると
アプリケーション起動時にクラッシュします。

言葉通りそのままです。
まさか起動すらせんとは・・・。

今回は古いバージョンは検証していませんが、
前にやったときはできたと思います・・・iOSでやっただけかもしれませんが。

この問題はAndroidのバージョンと関係なく発生するようです。

コードで代替できなくもなさそうですが、
とんでもなくめんどくさい処理になりそうです。
まあ"change"イベントのたびに行をループして、
"title"を文字列検索して隠してやればいいのか。

iOSでは問題なく動作し・・・ないっ!!

そうでした。
iOSでは連携させると"SearchBar"と"TableView"の間に
わけのわからない空間ができます。
本当に邪魔な空間です。
少し調べてみたんですが"header"とか"TableView"の要素ではなさそうです。
でも色を塗ったら"TableView"の一部でした。
"SearchView"は関係ありません。
なのに連携を切るとそのスペースもなくなります。

わけがわかりません。

わけがわからない分、Androidのトラブルより厄介かも・・・。


ああ、そうそうレイアウトで思い出しました。
Androidの"SearchBar"は前からそうだったんですが、
高さをちゃんと指定してあげないとものすごい姿になります。
バーが画面全体を埋め尽くしてくれます。

サイズを指定するだけなので大きな問題ではありませんが、
iOSと併用する場合、デザイン面で気をつけなければなりません。
サイズに"dp"つけとけば大抵なんとかなりますけど。


あ・・・あれ?
Androidで"Active"タブの指定が効かなくなってる・・・。
"SDK 3.0.0.GA"ではできる!!
ぐっちゃぐちゃだなぁ・・・。
スポンサーサイト

JavaScript コメント: 0 トラックバック: 0

Titanium、Android2.3のWebViewに致命的トラブルがある

2013-03-05

とうとうぶつかりました。
回避不能な致命的トラブルに。

っていうかよーく調べたらSDKの"2.1.4"からの問題でした。
淡い期待を抱いたのですが"3.0.2.GA"でも解消していません。
ただしAndroid2.3の問題です。
Android4.2では怪しげな動きをしますがどうにか動作しています。

検証用のプロジェクトはまた改めて展開しますが、
"WebView"の設定された"Window"を"TabGroup"の"open"メソッドの
パラメータとして渡した場合は正常に動作します。
しかし"Window"自身の"open"メソッドを使用すると、
その内部のHTMLのテキストフィールドにカーソルが渡りません。
つまり入力できなくなるのです。
致命的すぎます。

Alloyの場合、



と書いたものは問題なく動作します。
しかしこれまでの非Alloyのように"Titanium.UI"のメソッドを使って
"WebView"のある"Window"をボタンなどのイベントに設定して開いた場合は
その"open"メソッドの違いで同じ問題が発生します。

この件に気づいたのは"Alloy.builtins"の検証中でした。
その中の"social.authrize()"を使ってTwitterのOAuthの操作をしていたときです。
iOSではいともあっさり動作したのですが、
AndroidではOAuthの認証画面に入力できなくて使えない。

最初はこの"Alloy.builtins"やOAuthにありがちな問題かと思ったのですが、
嫌な予感がして調べたら違っていました。
しかもGoogleなど一般のページを開いても同じなので、
"WebView"とその"Window"のコンビネーションの問題。
普通の"Window"と"TextField"では問題ありません。

AndroidのActivity周りの挙動が変わったせいですかね?
詳しくないのでよくわかりませんが・・・。

SDKのバージョンとしてはこんな感じ。

2.1.0 OK
2.1.1 OK?
2.1.3 OK?
2.1.4 NG

ただ2.1.3以前でも1回目はフォーカスが外れたりと怪しい挙動が・・・。

毎度思うのですがAppceleratorは提供した全機能を
少なくともAndroidの全バージョンでテストしていません。
それは明らかです。

まあいろいろな部分でAndroid側のテストが甘いと思う部分は感じますが、
半分以上はAppceleratorというよりGoogleのガバナンスの問題ですね。
Androidのバージョン毎、ハードウェア毎のひどすぎる断片化がAndroidの発展を
妨げてきたのは間違いないところ。
"x.x.x"の2桁目のマイナーバージョンが変わっただけで
まるで別物になるわけですから・・・。
しかもハードウェアが変わると同じバージョンでも動かないことはザラ。
4.1系ぐらいでずいぶん使えそうなそれらしい動きになってきたんですが・・・
過去を切り捨てますか?


それにアナウンス通りならTwitterAPIの1.0はもうじき完全停止するはず。
1.1からOAuthが必須になるのですが・・・。

ここまで順調にきましたが大事なところで致命傷。
書き方の問題だけなら強制的に上書きすれば直ると思ったのですが・・・。
予定が完全に狂いました。

無理矢理タブで開かせることができるかには挑戦する予定。

とにかくAndroidのOAuth周りはとことん言うことを聞きません・・・。
ほぼ祟りです。
まだ前から引きずってる未解決の問題を抱えてるんですが・・・。
それで初作も挫折しましたし・・・。

これIssueに出てるのかな。
探すのも難儀なんですが・・・。
Issueって提出できるのかな?
もっと難儀なんですが・・・。

JavaScript コメント: 0 トラックバック: 0

アップデートするとTitanium Studioのライブラリパスが変わる

2013-03-03

Titanium Studioの3.0以降の話だと思うんですが・・・

アップデートすると
SDKやモジュールを格納しているライブラリパスが書き変わってしまいます。
いい加減にしてほしいです。

具体的にはインストール時は

"/Users/(アカウント)/Library/Application Support/Titanium"

ということでユーザ領域に設定されているのですが、

"/Library/Application Support/Titanium"

ということでシステム領域に書き変わってしまいます。
結果的に今までSDKが引き継げなくなったように見えます。

ただそこそこデカいデータなのでSSDなど容量が限られたマシンの場合は
システム領域にあってくれた方が安心といえば安心ですが・・・。

逆にこの仕組みからわかるように、
他のマシンからライブラリをもってくればSDKは移行できます。
基本的に互換性を維持する気はなさそうなので
ライブラリは確保しておいた方がよさそうです。

JavaScript コメント: 0 トラックバック: 0

最新版

2013-03-01

とりあえず1ヶ月(28日間ですが…)何らかの記事を突っ込んでみました。

「互換性プラットフォーム」といいながら
いろいろ問題をはらんできたTitanium Mobile。
そして鳴り物入りで登場のAlloy。
ビジネス的に今後も成立するのかどうか、
作る側も使う側のなかなかのギャンブルなんですが、
覚悟して使ってみたところ、今のところ思ったよりも聞き分けのいい子でした。

デバッガーに頼り切っていた人は死ぬと思うけど。

この調子で・・・Windows8対応できることを祈りたいところ・・・

が・・・

数日前にAlloyの1.0.0が出たようですね・・・

それに伴う対応なのかTitanium SDKとTitanium Studioが3.0.2・・・

ああ、恐ろしい。
バージョン検証しなければなりませんね。

その上でGitHub上にこれまで未アップロードの検証プロジェクトを
公開していきたいと思います。

とりあえず動かしてみたところ、
デフォルトプロジェクトのtiapp.xmlから
"ti.physicalSizeCategory"モジュールが消えました。
っていうかあれは何だったの?
ああ、"app.js"が開かなくなってちゃんと"index.xml"が開くようになっていますね。
ついでにタブアプリケーションの警告も消えています。
指定しない場合は先頭のタブをデフォルトと認識するようになったっぽいです。

JavaScript コメント: 0 トラックバック: 0

Alloy Frameworkの広告

2013-02-28

Alloy Frameworkの広告について少し整理しておきます。

基本的に2.x系と変わっていないと思います。
特にiOSの場合".xml"に…

<AdView />

でiAdが表示されます。
".tss"に"AdView"のスタイルを書けばそれらもそのまま反映されます。
素晴らしすぎます。

まあでもいろいろと制御は必要なので現実的には以下のようになるでしょうか?

<AdView platform="ios" id="ad" onLoad="visibleAd" onError="hideAd" />

iOSでしか表示されないのですから"platform"を指定しておいた方が無難と言えば無難。
さらにAndroidで広告を切り替えて表示するなら

<View platform="android" id="ad" />

のようにしておけばよさそうです。
自分はこれをモジュールとして構成したいので"View"だけ定義するつもりですが…。
形になったら公開する予定です。

また広告には取れないタイミングがあって無駄に真っ白に表示されます。
なのでiAdの場合は"error"イベントに対して

var hideAd = function (event) {
 event.source.hide = true;
 //$.ad.hide = true;
};

"load"イベントに対して

var visibleAd = function (event) {
 event.source.hide = false;
 //$.ad.hide = false;
};

とでも".js"に書いて、タグに設定しておけば自動的に表示制御ができるようになります。

var hideAd = function (isHidden) {
 $.ad.hide = isHidden;
};
$.ad.on('load', function (event) {
 hideAd(false);
});
$.ad.on('error', function (event) {
 hideAd(true);
});

前後や関連の処理によってはこの書き方の方がスッキリするかもしれません。

さらに前回の応用として、回転時にイベントの処理を設定しておけば、
追随してくれます。

var fitWidth = function (event) {
 $.ad.width = Titanium.UI.FILL;
 $.ad.bottom = 0;
};
Titanium.Gesture.addEventListener('orientationchange', fitWidth);

こちらのイベントではオブジェクトが取得できないので"id"が必須。
とりあえず自分の環境ではこの書き方で下にへばりついていてくれます。
さらにiAdでは最近"landscape"対応が進んでいるようで
高さ"32pt"のデザインが含まれています…が…サイズはとれるのかな?
まだ混在しているようなのでサイズが取得できないとどうしようもないですね。
ここら辺、内部的にはどうなっているのか。
調査を続ける必要がありそうです。

あと残る問題はクソめんどくさいAppleとの「iAd契約」だけですね。
最初の1回限りですが、めんどくさい。
難しくはないですがめんどうな契約処理が必要です。
これもいずれまとめますが、
近年それほどやり方は変わってないようなので過去の記事を参照してください。


次にAndroid。
今はいろいろな広告媒体が出ていますが、
「Titaniumに対応」となるとどこまでできるのやら。
最悪自分でモジュールを書けばできない広告はないと思うのですが、
とりあえず自分は公式に存在しているAdMobだけを使っています。

AdMobだったらiOSでも扱えるのでそちらに統一すれば…と思わなくもないのですが、
何分、iAdに比べるとだいぶいかがわしい方向によっているので、
使い分けることにしました。

そのAdMobモジュール。
GitHubの公式ページからダウンロードしてください。
サイトを開き"Code"のタブをたどっていくと
"ZIP"でダウンロードできるボタンが出てきます。
これを展開すると奥の方に"admob/mobile/android/dist"ディレクトリがあるので、
このなかの".zip"を展開して使うのが一番簡単です。
("example"や"documentation"はエラーが出ることがあるので削除、
"platform"も不要です。)
"Titanium"からも展開できますが、展開した"modules"ディレクトリを
そのままルート("app"と同じ階層)にコピーしてしまうのがいいでしょう。
ちゃんと読めていれば"tiapp.xml"のTiApp Editorの"Overview"に追加されているはず。
表示されなければ、[+]ボタンで追加していくか、

<modules>
 <module platform="android" version="1.0">ti.physicalSizeCategory</module>
 <module platform="android" version="2.1.0">ti.admob</module>
</modules>

の表記を追加。
[+]ボタンで追加すると

 <module>ti.admob</module>

となって最新バージョンが使われるようですが、恐ろしいのでやってません。
さらにいろいろ制約があって、AndroidのSDKを最新にしておいた方が無難です。
最近入れたSDKなら余裕でしょうけれど・・・。

で、"tiapp.xml"に

 <android xmlns:android="http://schemas.android.com/apk/res/android">
  <tool-api-level>13</tool-api-level>
 </android>

という指定が必要になります。
本日拾った最新?の"2.1.0"もまだこの指定でいけました。

で、AdMobの場合、先に契約が必要です。
これまた結構めんどうな手順を乗り越えて、
"publisherId"の取得までこぎ着けてください。
この手順もそのうちまとめます。

 var admob = require('ti.admob');
 コンテナとなる親オブジェクト.add(admob.createView({
  publisherId: '発行されたid'
 }));

あとはこれで表示されます。
ただAdMobはちょっと癖があって、なかなか広告が表示されないときがあります。
それにそなえて"createView"したオブジェクトの"requestAd"メソッドを
表示されるまで繰り返す処理をしておいた方が無難です。
これもまたいずれまとめますが
Titanium:AndroidのAdMobでかなかなa 広告が表示されない(原文ママ)を参照してみてください。
そのものズバリです。

[参照プロジェクト]

※未アップロード

[動作環境]
Titanium Studio 3.0.1
Titanium SDK 3.0.0.GA
Alloy 0.3.5(20130118現在)

JavaScript コメント: 0 トラックバック: 0

ホーム 次ページ >

プロフィール

AOILab

Author:AOILab
FC2ブログへようこそ!

ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文:

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。