Hatena::ブログ(Diary)

_development, RSSフィード Twitter

2013-06-06

Android : Navigation Drawer をActionBarSherlockで使う

これはY.A.M の 雑記帳: Android : Navigation Drawer を使うの補足記事であり、Support Libraryのr13で追加されたNavigation DrawerActionBarSherlockで使う方法です。


ActionBarSherlockの現行バージョン4.3.1はNavigationDrawerに完全には対応していません。

Android2.3またはそれ以下のバージョンでNavigationDrawerを表示すると、indicatorの表示が"三"みたいなアイコンではなく、UP"<"になります。


これに対して、Adds ActionBarDrawerToggle compatible with ActionBarSherlockというPull Requestが存在するのですが、Jake氏曰くI can't add things like this until the support library is updated in Maven central.ということで、このPull Requestはクローズされてしまいました。


どういうことかというと、ActionBarSherlockはビルドMavenを使っており、且つMaven Centralのandroid-support-v4に依存して構成されています。しかし、現時点でCentralにあるv4のバージョンはr7....。

このため、Jake氏は(NavigationDrawerの入った)r13がCentralにあがるまで対応できないと言っているわけです。


というわけで現状、ActionBarSherlockでNavigationDrawerを使うには上述のPull Requestのリポジトリをcloneするか、特定のバージョンのActionBarSherlockと共に使いたい場合はパッチ適用するのが良いでしょう。


cloneするかパッチ適用したら、ActionBarSherlockにポートされたActionBarDrawerToggleを使います。

ポートされたActionBarDrawerToggleは第二引数にActionBarSherlockのActionBarオブジェクトを渡すように変更されています。


ActionBarSherlockのActionBarDrawerToggleのインスタンス
import com.actionbarsherlock.app.ActionBarDrawerToggle;

...

new ActionBarDrawerToggle(activity, getSupportActionBar(), mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close);

(参考) Support-LibraryのActionBarDrawerToggleのインスタンス
import android.support.v4.app.ActionBarDrawerToggle;

...

new ActionBarDrawerToggle(activity, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close);


以下は、ActionBarSherlock4.2.0にパッチ適用する手順の例です。


ActionBarSherlock4.2.0にパッチ適用する手順


ActionBarDrawerToggleのパッチを作成します
$ git clone https://github.com/ianhanniballake/ActionBarSherlock.git ActionBarSherlock-ActionBarDrawerToggle
$ cd ActionBarSherlock-ActionBarDrawerToggle
$ git format-patch -r HEAD~

次のようなパッチファイルが作られます。

0001-Adds-ActionBarDrawerToggle-compatible-with-ActionBar.patch

作成済みのパッチファイルはこちらです。

https://gist.github.com/esmasui/5720821



ActionBarSherlock4.2.0にパッチ適用します

$ git clone https://github.com/JakeWharton/ActionBarSherlock.git ActionBarSherlock
$ cd ActionBarSherlock
$ git checkout 4.2.0
$ git checkout -b ActionBarDrawerToggle
$ cd library

dry-runオプションを指定してパッチ適用できるか確認します。

$ patch --dry-run -p2 -i ../../ActionBarSherlock-ActionBarDrawerToggle/0001-Adds-ActionBarDrawerToggle-compatible-with-ActionBar.patch 
patching file src/com/actionbarsherlock/app/ActionBar.java
patching file src/com/actionbarsherlock/app/ActionBarDrawerToggle.java
patching file src/com/actionbarsherlock/internal/app/ActionBarImpl.java
Hunk #2 succeeded at 372 (offset -5 lines).
patching file src/com/actionbarsherlock/internal/app/ActionBarWrapper.java
Hunk #2 succeeded at 180 (offset -12 lines).
patching file src/com/actionbarsherlock/internal/widget/ActionBarView.java
Hunk #1 succeeded at 628 (offset 83 lines).

dry-runで問題がなかったのでパッチを実際に適用します。

$ patch -p2 -i ../../ActionBarSherlock-ActionBarDrawerToggle/0001-Adds-ActionBarDrawerToggle-compatible-with-ActionBar.patch 
patching file src/com/actionbarsherlock/app/ActionBar.java
patching file src/com/actionbarsherlock/app/ActionBarDrawerToggle.java
patching file src/com/actionbarsherlock/internal/app/ActionBarImpl.java
Hunk #2 succeeded at 372 (offset -5 lines).
patching file src/com/actionbarsherlock/internal/app/ActionBarWrapper.java
Hunk #2 succeeded at 180 (offset -12 lines).
patching file src/com/actionbarsherlock/internal/widget/ActionBarView.java
Hunk #1 succeeded at 628 (offset 83 lines).

変更を確認します。

$ git status
# On branch ActionBarDrawerToggle
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   src/com/actionbarsherlock/app/ActionBar.java
#	modified:   src/com/actionbarsherlock/internal/app/ActionBarImpl.java
#	modified:   src/com/actionbarsherlock/internal/app/ActionBarWrapper.java
#	modified:   src/com/actionbarsherlock/internal/widget/ActionBarView.java
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	src/com/actionbarsherlock/app/ActionBarDrawerToggle.java
#	src/com/actionbarsherlock/internal/app/ActionBarImpl.java.orig
#	src/com/actionbarsherlock/internal/app/ActionBarWrapper.java.orig
#	src/com/actionbarsherlock/internal/widget/ActionBarView.java.orig
no changes added to commit (use "git add" and/or "git commit -a")

パッチ適用する際に作られた*.origファイルを削除します。

$ find . -name \*.orig -exec rm {} \;

変更内容をコミットします。

$ cd ..
$ git add --all
$ git commit -m "Adds ActionBarDrawerToggle compatible with ActionBarSherlock
>
>
>https://github.com/ianhanniballake/ActionBarSherlock/commit/b2dd2a804ad2030b4a92d8ee8b9bf8129b1eee70
>"
[ActionBarDrawerToggle 68dc5aa] Adds ActionBarDrawerToggle compatible with ActionBarSherlock
 5 files changed, 524 insertions(+), 1 deletion(-)
 create mode 100644 library/src/com/actionbarsherlock/app/ActionBarDrawerToggle.java

以上です。

これらを適用済みのリポジトリはこちらです。

https://github.com/esmasui/ActionBarSherlock/commits/ActionBarDrawerToggle



参考

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/esmasui/20130606/1370517111
Connection: close