2012年7月14日土曜日

ActionBarの表示位置設定

JCROMはActionBarが画面下部に表示されます。
素のICSみたく上に表示する設定を対応してみました。

そのあたりのコアな部分は frameworks/base/ だろうと当たりをつけます。
(これまで読んだり調べたりしたソースはほとんど frameworks/base/ 配下^^;)
git log を追ったら 47129b8a5e634ca8811f0d053ab77cbe7cd0d112 で「Change Action Bar position」という対応が入っていました。ふむふむ。
このときの差分を見ると、frameworks/base/core/res/res/layout/ にあるいくつかの screen*.xml なリソースファイルで @android:id/content な <FrameLayout> の場所を変えているだけのようです。

使っているところを念のため全ソースの中から検索します。
grep -r "--include=*.java" R.layout.screen *
(毎回 --include をタイプするのは面倒なので grep-java というスクリプトにしてある^^;)
ApiDemoでも出てきましたが明らかに違うもので、実際に使っているのは frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java の中の1関数だけ。ここに手を入れれば設定に応じて 上ActionBar/下ActionBar の切り替えができそうです。
inflate してから R.id.content を移動するのは手間があるので、inflate 前にレイアウトリソースを差し替えてしまいます。(差分
ActionBarを上に持つレイアウトを新しく作った方が差分は少なくなりますが、screen*.xml はAOSPのファイルと同一として、これまでJCROMで使っていた screen*.xml を screenb*.xml にリネームしました。(AOSPとの差分を少なくした)

あとは設定画面に項目を追加します。(差分

p.s. /packages/apps/Settings/src/com/android/settings/JapaneseCustomRomSettings.java の updateMyHobbyOptions()、mForceMyFont でなく mForceMyHobby じゃないかな…と思ったけど、このクラスの update***Options() ってそもそも呼ばれてませんね^^; SystemProperties に set()するだけでどうやって設定取得してるのかと思ったら、自動的に Preference に保存されるのを使ってるみたい。なるほど。

0 件のコメント:

コメントを投稿