ActionBar ハンズオン写経メモ

自分メモ、ということにて。なんとなく資料をまんま写したカンジだったりしますがご容赦頂ければ幸いです (何処
というか、一通り写経して資料を再確認してみたんですが、これ凄いな。あと PaintView の実装もポイント高そうなので別途確認しておきたいです。

2.1 プロジェクトを作成する

略、とは言え Android プロジェクト新規作成なショートカットができていたのを知りませんでした。

2.2 オーバーフローメニュー

  • menu.xml 追加して onCreateOptionsMenu と onOptionsItemSelected 追加
  • WRITE_EXTERNAL_STORAGE な permission も追加

2.3 フラグメントからのメニューの表示とアクションアイテム化

  • PaintFragment 追加
    • onCreateView および onCreateOptionsMenu、onOptionsItemSelected
    • shareImage と clearCanvs という private メソド
  • res/layout/main.xml 修正 (PaintFragment 使用
  • PaintFragment にて onCreate 追加
    • setHasOptionsMenu(true) する
  • オーバーフローからアクションアイテムに
    • menu.xml の各 item の showAsAction を ifRoom に

2.4 ナビゲーション領域を使ってペンカラー変更

PaintFragment
  • 配列 COLORS の追加
  • ActionBar.OnNavigationListener なオブジェクト生成
    • onActivityCreated にて ActionBar#setListNavigationCallbacks に渡しています
      • リストのアイテムが選択された時の処理
    • mCanvas に対してペンカラーの変更を指示
  • onActivityCreate メソド追加
    • Activity から ActionBar を取得してナビゲーションモード LIST に設定
      • getActivity().getActionBar().setNavigationMode()
    • ArrayAdapter のオブジェクト作って ImageView のリストにする
    • リストのアイテムとして表示される View に対する処理
res/layout/list_item_color.xml 追加
  • ドロップダウンリストの一色分のレイアウト (使用中の色が表示

2.5 ActionView で背景色を変える

  • ActionView について
    • ActionItem 発動時に独自の View を配置
    • ActionView 用に SearchView が提供されている
    • ここでは独自 View を作っている模様
    • ActionView 表示時には左側に配置されているものは非表示に右側に配置されているものはオーバーフロー領域に配置される
      • ifRoom 設定な挙動であることに注意
  • ActionItem 用のボタン画像を res 配下にコピィ
  • res/layout/actionview_color.xml 追加
    • ImageButton の羅列
    • これがカラーパレット (ActionView) になるのか
  • menu/menu.xml に ActionItem 追加
    • actionLayout 属性に上のレイアウトを指定
    • showAsAction に collapseActionView 指定で押されるまでは非表示に
  • PaintFragment の onCreateOptionsMenu メソド修正
    • 背景色が選択された時の処理
    • リスナにクリックされたら背景色変更するナニを登録
    • 背景色選択後は ActionView を非表示に
      • MenuItem#collapseActionView メソド

2.6 ホームアイコンを押したらお絵かき内容を保存して終了

  • とりあえず描いている内容を保存して終了
  • PaintFragment の onCreate 修正
    • getActivity().getActionBar().setHomeButtonEnabled(true)
  • PaintFragment の onOptionsItemSelected 修正
    • android.R.id.home だったら云々
      • ホームアイコン押された時の id
    • saveImage 呼んで結果で Toast をナニ
    • saveImage メソド追加
      • mCanvas.save して云々 (PaintView の機能)
    • Files クラス云々

2.7 お絵かき画像の一覧画面作成とお絵かき画面のホームアイコンを up にする

  • 一覧画面を GridView で作成
  • ここでは絵をかく画面で home アイコンを押すと画像を保存して一覧に戻る

・まだ一覧からの遷移は実装されていない

  • Up 動作の実装方法の一つをとりあげている
  • res/layout/gallery.xml 新規作成
  • res/menu/gallery_action.xml
    • サムネイルをロングタップした際のメニュ
  • GalleryActivity 新規作成
    • でかいので段階的に作成
    • onCreate にて_ロングタップで複数選択モード_?
      • MultiChoiceModeListener オブジェクト生成
      • これを setMultiChoiceModeListener に渡す
    • onResume で updateImages 呼び出し
    • updateImages 定義
      • GridView にサムネイルを表示する ListAdapter の定義
    • deleteCheckedImages 定義して削除処理で呼び出し
      • チェックされたイメージの削除の実装
    • AndroidManifest に追加した Activity の記述を追加
      • ランチャから起動できるようになっている
  • PaintFragment への盛り込み
    • onCreate にて Up 用の表示がされるよう修正
      • getActivity().getActionBar().setDisplayHomeAsUpEnabled(true)
    • ホームアイコンが押された時の処理修正
      • Intent に FLAG_ACTIVITY_CLEAR_TOP 追加
      • onOptionsItemSelected メソド修正
        GalleryActivity への明示的インテント発行
    • onPause メソド追加

2.8 Gallery にアクションアイテムを追加する

  • res/menu/gallery_menu.xml 追加
    • 追加と削除
  • GalleryActivity に onCreateOptionsMenu と onOptionsItemSelected 追加
    • 追加だと明示的 intent で PaintActivity に遷移
    • 削除処理は PaintView のメソド中心

2.9 GalleryActivity に表示されている絵をタップするとお絵かき画面で開く

  • Gallery に表示されている絵を PaintActivity で開けるように
  • PaintFragment に setStrokeString を追加して外から復元可能に
    • PaintView#restore を呼び出すだけで OK
  • PaintFragment にて画面回転時に絵をロストしない処理の盛り込み
    • onCreate で savedInstanceState が null でない場合の記述
    • onSavedInstanceState の追加
  • PaintActivity から setStrokeString を呼び出すのかどうか
    • 文字列 EXTRA_STROKE_FILE 追加
    • onCreate にてインテントチェックしてストロークファイルが指定されていれば読み込んだ上で PaintFragment にセット
      • setStrokeString をここで呼び出している
    • startActivity メソドをオーバーライド
  • GalleryActivity にサムネイル押された際の画面遷移を記述
    • PaintActivity の仕込みはこのためだった模様