2013年7月1日月曜日

Navigation DrawerをActionBarSherlockで使ってみたい(デザインガイド非準拠)

けど失敗したのでだれか助けて(*´^`*)
という話です。

参考記事

参考にしたのはこのあたりの記事です。

Android : Navigation Drawer を使う
http://y-anz-m.blogspot.jp/2013/05/android-navigation-drawer.html

Android : Navigation Drawer をActionBarSherlockで使う
http://d.hatena.ne.jp/esmasui/20130606/1370517111

[Android] Navigation Drawerを画面上側から表示させる
http://lily-light.blogspot.jp/2013/06/android-navigation-drawer.html

 

やったこと

1、yanzmさんの記事を元にしたesmasuiさんのupしてるパッチ入りActionBarSherlockをベースにサンプル作成
→API 17だとうまくいくけど、API7、10で例外

2、lilylightさんの記事、githubソース(Vertical系)も取り込んで、Horizonも追加してみた

追加ソース
src/com/actionbarsherlock/custom/app/ActionBarHorizonDrawerToggle.java←esmasuiさんのソースへlilylightさんの差分追加
src/com/actionbarsherlock/custom/app/ActionBarVerticalDrawerToggle.java←上記を参考に修正
src/com/actionbarsherlock/custom/widget/VerticalDrawerLayout.java←lilylightさんの差分追加そのまま
src/com/actionbarsherlock/custom/widget/HorizonDrawerLayout.java←上記を参考に修正

→結局一緒。

やりたかったこと

ほんとうにやりたかったことは、ActionBarのアイコンは変更せず(Navigationぽく感じるので)に、
コンテンツ操作時にそのメニューをRIGHTかBOTTOMあたりにスライド移動以外のアニメーションで
Drawer表示かつ、複数Drawer切り替えみたいなことをしたかったんだけど。。ぐぬぬ。

実装サンプル

できてない版としてGitHubにあっぷしておきました。
lilylightさんの記事にもありますが、デザインガイド非準拠なので、利用は要検討。

https://github.com/miquniqu/AbsNavigationDrawerSample

 

できてること

API Level 17 のAVDで一通り操作できる。

・メニュー/デフォルト
image image

・Horizon LEFT/Horizon RIGHT
imageimage

・Vertical TOP/Vertical BOTTOM
image image

 

できてないこと

API Level 10、7 のAVDでandroid.view.InflateException。

image 

以下LogCat

06-30 23:32:44.912: E/AndroidRuntime(219): Uncaught handler: thread main exiting due to uncaught exception
06-30 23:32:44.962: E/AndroidRuntime(219): android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.LayoutInflater.createView(LayoutInflater.java:513)
06-30 23:32:44.962: E/AndroidRuntime(219):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.AbsListView.obtainView(AbsListView.java:1274)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.ListView.makeAndAddView(ListView.java:1668)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.ListView.fillDown(ListView.java:637)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.ListView.fillFromTop(ListView.java:694)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.ListView.layoutChildren(ListView.java:1507)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.AbsListView.onLayout(AbsListView.java:1113)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.View.layout(View.java:6830)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:672)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.View.layout(View.java:6830)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.View.layout(View.java:6830)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.View.layout(View.java:6830)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.View.layout(View.java:6830)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.View.layout(View.java:6830)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.os.Looper.loop(Looper.java:123)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.app.ActivityThread.main(ActivityThread.java:4363)
06-30 23:32:44.962: E/AndroidRuntime(219):     at java.lang.reflect.Method.invokeNative(Native Method)
06-30 23:32:44.962: E/AndroidRuntime(219):     at java.lang.reflect.Method.invoke(Method.java:521)
06-30 23:32:44.962: E/AndroidRuntime(219):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-30 23:32:44.962: E/AndroidRuntime(219):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-30 23:32:44.962: E/AndroidRuntime(219):     at dalvik.system.NativeStart.main(Native Method)
06-30 23:32:44.962: E/AndroidRuntime(219): Caused by: java.lang.reflect.InvocationTargetException
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.TextView.<init>(TextView.java:320)
06-30 23:32:44.962: E/AndroidRuntime(219):     at java.lang.reflect.Constructor.constructNative(Native Method)
06-30 23:32:44.962: E/AndroidRuntime(219):     at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.LayoutInflater.createView(LayoutInflater.java:500)
06-30 23:32:44.962: E/AndroidRuntime(219):     ... 35 more
06-30 23:32:44.962: E/AndroidRuntime(219): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/abs__ic_ab_back_holo_dark.png from drawable resource ID #0x0
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.content.res.Resources.loadDrawable(Resources.java:1710)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.view.View.<init>(View.java:1850)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.widget.TextView.<init>(TextView.java:326)
06-30 23:32:44.962: E/AndroidRuntime(219):     ... 39 more
06-30 23:32:44.962: E/AndroidRuntime(219): Caused by: java.io.FileNotFoundException: res/drawable-hdpi/abs__ic_ab_back_holo_dark.png
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.content.res.AssetManager.openNonAssetNative(Native Method)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.content.res.AssetManager.openNonAsset(AssetManager.java:390)
06-30 23:32:44.962: E/AndroidRuntime(219):     at android.content.res.Resources.loadDrawable(Resources.java:1702)
06-30 23:32:44.962: E/AndroidRuntime(219):     ... 42 more

0 件のコメント:

コメントを投稿