2012年4月10日火曜日

[Android]Galaxy Nexusをタブレットぽくつかう (2)

先日、GDD Blog: [Android]Galaxy Nexusをタブレットぽくつかうというねたを書きました。

結果的に、AOKP(Android Open Kang Project)というカスタムROMを入れることで、簡単に実現できるということがわかりました。
導入後、AOKPの設定画面より160DPIに変更することで、タブレットモードに切り替わります、LCD Density Modderなどで解像度を変更しても同じ効果が得られます。
解像度によっては、エラーが出ます。そこでAOKPを入れると最初から入っているNova LauncherをHOMEアプリに変更します。
この、Nova LauncherというHOMEアプリすごくよくできていて、解像度にあわせてドロアーのアイコンの表示数を最適化。HOMEスクリーン側もアイコンの個数などしてできます。標準がベースらしいですし、使い勝手もよいのでコレお勧めです。

※カスタムROMを入れるにはブートローダーのアンロックなど、保障が受けられなくなる行為を必要としますので、適応には十分注意して下さい。

2012年4月6日金曜日

[Android]Support Package V7?

ViewPagerの情報を集めるためにネットを検索していると、android.support.v7.widget.GridLayoutっていうキーワードが何かヒットしました。
「あぁ4.0のGridLayoutね」と思ったんですが、よくみると、パッケージ名がアレになってる!

で、[SDKのフォルダ]/extras/android/supportをみると、v7フォルダがあり、その中にそれらしいJarが!
jarの中を除くと、GridLayout系のclassファイルが入っていました。

で、readmeをよんでみると、

Library Project including GridLayout.

This can be used by an Android project to provide
access to GridLayout on applications running on API 7+

ってあります。直訳すると、
「GridLayoutのを含むライブラリプロジェクト。
これが提供するAndroidプロジェクトで使用することができ
API7で実行するアプリケーションでグリッドレイアウトにアクセス+」

つまり、API7(2.1以上)でGridLayoutが使える。このフォルダがライブラリプロジェクトで構成されるので、参照しろ。ということでしょうか。

[他]WifiNotifyをバージョンアップしました

半年ほど前にリリースしましたAndroidアプリWifi Notifyですが、バージョンアップしてICS対応しました。
その他としましては、通知の情報にIPアドレスを表示するようにしました。
3GよりWiFiメインで利用するかは、一度お試しを。

2012年3月31日土曜日

[Android]Galaxy Nexusをタブレットぽくつかう

GalaxyNexusの解像度は、1280×720あり、ほとんどタブレットと同じ解像度です。
それを、320dpiにすることで、スマートフォンのUIを表現しています。

たとえば240dpiに変更すると、画面サイズが論理的に広くなります。通常この設定を変更することはできませんが、ROOT権限を取得し、/system/build.propにある、ro.sf.lcd_density=320となっている値を、240や160に変更します。そうすることで、タブレットに近いUI表示になります。

 しかしこの作業、文鎮化のリスクが伴います。調べてみるとフリーでよいソフトがありました。
LCD Density Modder

しかし、dpiを160に設定するとエラーが発生します。何とかする方法は無いんだろうか。。。

2012年3月23日金曜日

[Android]ADT&SDK 17

今日、SDK17&ADT17がリリースされたようです。
エミュレータの高速が話題になっているみたいです。

・・・ということで早速使ってみたんですが、高速になったかといわれると?です。

2012年2月25日土曜日

[android]バックキー押下で処理をハンドリング=Activity#finishのタイミングではない

時々、アクティビティの終了と同時に、処理を実装したいケースがあります。
外的なイベントであれば、バックキー押下がそれに当たります。
こういった場合、Activity#onKeyDownなんかで、キーコードをフックして何か処理を実施するものだと思っていましたが、コレがNGってことがわかりました。
何がNGっかというと、Activity#onKeyDownやActivity#onKeyUpでは、アクティビティの終了にならないケースがあるからです。
具体的には、以下のような流れになります。
 1.バックキー押下したままにする
 2.Aアクティビティで、画面遷移するボタンを押下
 3.Bアクティビティが表示される
 4.バックキー放す
 5.Bアクティビティはfinishしないけど、keyUpは発生する
バックキーと同期して処理を行いたい場合は、Activity#onBackPressedをオーバライドするとよさそうです。
Activity#onBackPressedは2.0以降を境に、処理タイミングが異なりますので、やや注意が必要です。
2.0以前:onKeyDownで処理
2.0以降:onKeyUpで処理。ただしonKeyDown→onKeyUpじゃないと呼び出されない

あ、ちなみに、Activity#onKeyDownでfinishと同時に、DB更新。みたいな事をやると、これ相当ヤバイ。Activity#onKeyDownは、キーを長押しすると、連続で発生するイベントだからです。

Activity#onBackPressedで、アクティビティ終了と判定した場合、Activity#isFinishingがtrueになる。コレを使うとフラグメントも含め処理がうまくいきそう!

2012年2月1日水曜日

[Android]Activity#onStartは意外に呼ばれない?

ボタンの2度押し対策として、以下のような対策を先日実施しました。


  • Activity#startActivityをオーバライド。フラグがoffならstartActivityする

  • Activity#onStartで、フラグをクリア

大体のケースでうまく行ったのですが、時々フラグがoffにならず、はてなと思っていろいろなバリエーションを調べてみると、次のアクティビティに遷移してすぐにバックキー押下みたいな操作を行うと発生することがわかりました。そこまでたどり着くのにだいぶ時間を費やしたんですが、なんでフラグがoffにならないかわかりませんでした。

で、onStartにトレースを入れてみると、呼ばれていないことがあるのがわかりました。
えぇそれが、遷移してすぐにバックキーのときです。
そのため、onResumeにフラグoffを移したら思い通りに動作するようになりました。

そういえば、上に透明なアクティビティがあるときも同じような現象があった気がします。
これは、Activityが不可視状態に遷移することなく、元に戻ったタイミングである。と考えるとまぁ納得がいきますね。