2012/11/18

[android]PreferenceActivityとActivity

わかったような、わからんような・・・。
基本に戻って、Android DevelopersのSettingsを読んだ。
<PreferenceScreen>の書き方は、前と同じようだ。
前をあまり知らないが、昔使っていたxmlファイルも同じような書き方だった、というだけだが。

「Using Preference Fragments」に、「PreferenceFragmentを追加すればPreferenceActivityは使わなくてよい」とある。
このときは、こんな感じみたいだ。
  • 上のActivityは、"Activity"をextends
  • その中に、static classとしてPreferenceFragmentをextendsしたものを持つ
    • onCreate()でaddPreferencesFromResource(R.layout.xxx)する
  • ActivityのonCreate()ではsetContentView(R.layout.xxx)はやらない。
    代わりにgetFragmentManager().beginTransaction().replace()してstatic classを指定?する。
こうすると、PreferenceActivityでやったときのような画面が表示された。
R.layout.xxxの中身を見て判断しているのかな?

じゃあPreferenceActivityはもういらないのか、と思って読み進めると「Using Preference Headers」でまた出てきた。
A500の設定画面は、左側に設定グループ、右側に選択した設定グループの中身が表示されていた。
あの左側に表示されるやつがHeaderみたいだ。
<PreferenceCategory>とはまた違うのか。
あるいは、<PreferenceScreen>の中に<PreferenceScreen>を書くようなsubscreenとも違うのかね。
subscreenは1つのxmlファイルの中に書かんといかんのだが、それが分離できてよい?
でも、ちょっとやれることが異なるような気がする。
とにかく、Preference Headerを使うときは、こんな感じみたいだ。
さっきと違うところは赤文字にした。
  • 上のActivityは、"PreferenceActivity"をextends
  • その中に、static classとしてPreferenceFragmentをextendsしたものを持つ
    • onCreate()でaddPreferencesFromResource(R.layout.xxx)する
  • ActivityのonCreate()ではsetContentView(R.layout.xxx)はやらない。
    getFragmentManager().beginTransaction().replace()もやらない。
  • onBuildHeaders()を追加する。
    その中でloadHeadersFromResource(R.xml.xxx_header)する
  • res/xml/xxx_headers.xmlを追加する。
    その中にandroid:fragmentでstatic classを指定?する。
こうすると、Nexus7では、最初にPreference Headerが表示され、それを選択するとPreferenceActivityでやったときのような画面が表示された。
Fragmentって、必ず画面が左右に分かれるわけじゃないんだな。
あまりFragment自体をわかっていなかったのだが、左右に画面を分けるしくみじゃなくて、画面の大きさを吸収するためのしくみらしい。
私にとってはNexus7はけっこう大きな画面だと思っていたのだが、Fragmentにしても画面遷移しているところからすると、まだまだ狭いということなのだろう。
試しに横向きにしてみたが、同じだった。
まあ、そういうものなのだろう。

試作アプリ
https://sites.google.com/site/hiro99ma/home/files/freeapk/LockMemo.apk?attredirects=0&d=1

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。