Android開発そろそろ完成間近

2012年4月6日金曜日

Android

t f B! P L

1日空いたのは新しいノートパソコンを買っていろいろと初期設定していたから・・・。新品のB5サイズノートPC、3万円で買えちゃう時代になったんですね・・・。スマホの半額以下。一番左下のキーがファンクションキーという恐ろしい子ですが他はなかなか気に入ってます。

デスクトップにへばりついてるのが苦痛だったので色んな体制でいじくれる軽めのノートが欲しかったのです。ちなみに、DELLの商品検討段階でのチャットシステムを初めて利用してみたのですが、あれいいですね。注文してから届くまでに2,3週間かかりさえしなければ買ってたと思います。

で、開発の進捗について。

これまでにできたこと
  • TOP画面とMAIN画面のUI
  • TOP画面からMAIN画面へ入力値を持って遷移
  • ブラウザの共有からMAIN画面を呼び出し
  • TOP画面もしくはブラウザから受け取ったURLにアクセスして文字コード判定&変換しつつソースを表示
  • 画面の縦横切り替え対応
  • 色分け表示、設定によるON/OFF
  • MENU実装 ※メインページのみ
  • メール送信 ※添付は挫折
  • ファイル保存
  • 他アプリへの共有
  • 読み込み中のプログレスバー表示
  • リンククリック時の暗黙インテント受け取り
  • 設定画面
  • リロード実装
  • 文字コードを指定してリロード
  • コンテキストメニューでCopy Allの実装 ※auto-link有効時のみ
今日できたこと
  • MAIN画面の慣性スクロール実装
  • progressDialogが止まる問題の解決
  • サイズによって色分け表示のON/OFFを切り替える
  • 広告について調べる ※継続中
  • SDカードのマウント有無を確認してSAVE画面に反映
  • 細かいバグフィックス
残課題
  • 日本語版UI実装
  • オリジナルアイコン作成

だいたい完成した。もう機能的には増やさずにバグ修正とUI(日本語版は必要なんだろうか)まわり調整して、広告組み込んで終わりかな。アイコンはデフォのままかも・・・。

はまったことメモその1。慣性スクロールについてはググってもよくわからずだったので大きい本屋行ってAndroid開発系の本全部手にとって目次見たんだけどそれらしきものはなく、困り果てていたのだが・・・。ScrollView という View に入れてしまえばいいだけのことだった・・・。基礎から順番に勉強した人なら誰でも知ってるレベルだからどこにも書いてなかったのかな・・・。今までは LinerLayout の中に EditText を入れただけの UI だったんだけど、これだとスクロールはするが慣性が働かない。ScrollView→LinerLayout→EditText の順に入れ子にすればそれだけで慣性スクロールが働くようになった。

はまったことメモその2。ぐるぐる回るスピナータイプの progressDialog を使っていたんだけど、数秒すると回転が止まってしまうという現象が発生。止まっている時間が長いと結局応答なしで強制終了されるダイアログが出てしまって progressDialog 出してる意味がない状態だった。これもググり方が悪かったのかなかなか情報がなかったんだけど、ヒントになるようなQAの掲示板をやっと発見してソース見直して解決。Androidの非同期処理にはやり方が三種類ある。Thread を使う方法と、AsyncTask ってのを使う方法と、Service を使う方法。最初 Thread を使っていたんだけど、AsyncTask 使えば?っていう書き込みを見てそれに変えてみたりしたけど駄目だった。原因は handler で EditText.setText() してたんだけど、そこにめっちゃ重い処理を書いてたこと。重い処理はあくまで run() の中に書いておいて、handler では軽い処理だけにしないといけなかった。

はまったことメモその3。progressDialog の途中で、Content-Length が指定値より大きかったらアラートダイアログを出して、カラーリングをするかしないか聞いて、その返答次第で処理を分岐させたかったんだけど、返答を待たずに処理が進んでしまう。絶対に出るアラートなら、その返答ボタンのコールバック関数内で処理させてしまえば済む話なんだけど、カラーリングがONかつサイズオーバーのときしかダイアログは出さず、それを満たさないときにはとっとと処理して欲しいので、コールバック関数の中に処理を書いてしまうわけにはいかなかった。フラグ用の変数を作り、アラート条件を満たさなかったときと、返答があったときにはそのフラグ変数に値を入れる。フラグ変数が null の間は sleep(1000) し続けるループを処理の前に置いて解決。

QooQ