ãŸããã
ããã«ã¡ã¯ãHabrïŒ
ããã«ç§ã¯ãããã¯ããå°ããªäœè«ãããããšæããŸãïŒç§ã¯ããã®ã¢ã³ããã€ãéçºè ã§ã¯ãªãããã åŠç¿ããŠããŸãã åå¿è åãã«èšèšããããã®æçš¿ã§ã¯ãç¹ã«Action LibraryãšãµããŒãã©ã€ãã©ãªã䜿çšããŠSlidingMenuãæ·»ä»ããããšã§ãæ³å®ãããã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã«çºçããåé¡ã®è§£æ±ºçãçµã¿åãããããšæããŸãã
ç§ã«ãšã£ãŠã®å質ã®äŸã¯ãVKãForsquareãããã³Instagramã§ãã å®éãActionBarãšSlidingMenuã䜿çšããããã®ã¢ã€ãã¢ã¯ããã«ãããããåãå ¥ããããŸããã ActionBarã¯3.0ã§ã®ã¿ãµããŒããããŠãããããããã§ã¯ãWebãµã€ãã®ã¬ã€ã¢ãŠã/éçºïŒç§ã®ã¡ã€ã³ããžãã¹ïŒãšInternet Explorerã§ã®é©åãªäœæ¥ãšåæ§ã«ãå€ãããŒãžã§ã³ã®Androidãšã®äºææ§ã«ã€ããŠæåã«èããŸããã æ€çŽ¢ã®ãããã§ãç§ã¯ããã«è§£æ±ºçãèŠã€ããŸãã- ããŒãžã§ã³2.1+çšã®ActionBar ã
å§ããŸããã
1. Eclipseã§æ°ãããããžã§ã¯ããäœæããŸãã ãããè¡ãæ¹æ³ã¯ãHabrahabrã®æ€çŽ¢ã䜿çšããŠèŠã€ããããšãã§ããŸãã ãµããŒããããæå°ããŒãžã§ã³ã¯API 7ã§ããã§ããã°ãããŒããªãïŒããŒãïŒãªãïŒã
2.ãµããŒãã©ã€ãã©ãªãæ¥ç¶ããŸãããããè¡ãæ¹æ³ã¯ãäžèšã®ãªã³ã¯ã«èšèŒãããŠããŸãã ããã§ãã念ã®ããã ãããã¯ãæžããŸãã
3. ããã¯ãç§ãçŽé¢ããªããã°ãªããªãã£ãæåã®åé¡ã§ãã3.0ããåã®Androidã§ã¯ãã¹ãŠæ£åžžã«åäœããŸãã äžèšã®èšäºã§1ã€ã®ãã€ã³ããæå®ãããŠããªãããšãããããŸã ããããã¯ã¯res / values / styles.xmlãã¡ã€ã«ã§ç¶æ¿ãããããšãææ¡ãããŠããŸãããããã¯æãæ£ãããªãã·ã§ã³ã§ã¯ãªãããšãããããŸããã ãããžã§ã¯ããäœæãããšãEclipseã¯ããã«APIã®ããŸããŸãªããŒãžã§ã³ã®ããã€ãã®ã¹ã¿ã€ã«ãã¡ã€ã«ãäœæããŸãã
- res / values / styles.xml-æšæºã¹ã¿ã€ã«ãã¡ã€ã«ã
- res / values-v11 / styles.xml -API 11+ã®ã¹ã¿ã€ã«ã·ãŒãã
- ããã³res / values-v14 / styles.xml -API 14+ã®ã¹ã¿ã€ã«ã·ãŒãã
äžèšã®ãã¡ã€ã«ã®ãã¡æåã®ãã¡ã€ã«ã§ã®ã¿ããŒããç¶æ¿ãããããããŒãžã§ã³Android 3.0ïŒAPI11ïŒãŸã§ããæ©èœããŸããã
ããã¯ããã¹ãŠã®ãã¡ã€ã«ã§ããŒããç¶æ¿ãããããããžã§ã¯ããããã§ã¹ãã§çŽæ¥è§£æ±ºããŸãã ãããè¡ãã«ã¯ãAndroidManifest.xmlã«ç§»åããŠæ¬¡ã®è¡ãèŠã€ããŸãã
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
亀æããå ŽæïŒ
android:theme="@style/AppTheme"
ã«ïŒ
android:theme="@style/Theme.AppCompat.Light"
è¡AndroidïŒããŒãããªãå Žåã¯è¿œå ããŸãã
ãã®å Žåããããã¯ããããã§ã¹ãã§çŽæ¥ç¶æ¿ããå Žåãé è²ã䜿çšã§ããªããããåãã¡ã€ã«ã§åå¥ã«ç¶æ¿ããæåã®ãªãã·ã§ã³ã䜿çšããããšããå§ãããŸãã
ãã®åé¡ã«ã¯2æ¥ããããŸããããã®è§£æ±ºçã¯ããŸã£ããç°ãªããããã¯ã«é¢ããæ å ±ãæ€çŽ¢ãããšãã«èŠã€ãããŸããã
å®è¡ããŠç¢ºèªããŠãã ããã ãã¹ãŠãæ©èœããŸãã

SlidingMenuãæ¥ç¶ãã
ãã®ãããªã¡ãã¥ãŒãæ€çŽ¢ããéçšã§ãããã«Drawerã«åºäŒããŸããã ãã ããããã€ãã®çç±ã§ããã¯å¿ èŠãããŸããã§ãããããã§ã¯èª¬æããŸããã
éžæã¯SlidingMenuã«ããã£ãã ã©ã€ãã©ãªã¯å®å šã«ç¡æã§ãGitHubã§å ¥æã§ããŸã ã
1.ãã¹ãŠã®ãã¡ã€ã«ãããŠã³ããŒãããEclipseãžã®æ¥ç¶ãéå§ããŸãããã®ããã«ã¯ã [ãã¡ã€ã«]â[æ°èŠ]â[ãã®ä»]â[æ¢åã®ã³ãŒãããAndroidãããžã§ã¯ã]ãéããŸããéããŠã£ã³ããŠã§ã以åã«ããŠã³ããŒãããSlidingMenuã®ã©ã€ãã©ãªãã©ã«ããŒãžã®ãã¹ãæå®ããŸã ãã¡ã€ã«ãã³ããŒããããã[OK]ãã¯ãªãã¯ããŸãã ã©ã€ãã©ãªãæ¥ç¶ãããŠããŸãã
2.以åã«äœæãããããžã§ã¯ãã«æ¥ç¶ããŸãã æ¥ç¶æé Support Liraryãç¹°ãè¿ããŸãããä»åã¯ãlibraryããéžæããŸãã
3. ãããŠã2çªç®ã®åé¡ããããŸã -ã³ã³ãœãŒã«ã¯2ã€ã®ãã¡ã€ã«android-support-v4.jarã®ç«¶åãå ±åããŸãã ãã®ãã¡ã€ã«ã¯å°ããããããžã§ã¯ãèªäœã«å«ãŸããŠããããããµããŒãã©ã€ãã©ãªãšSlidingMenuãæ¥ç¶ãããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¯ç°¡åã§ããããšãå€æããŸãããStackOverflow.comã§èŠã€ãããŸããããã®ãã¡ã€ã«ãSlidingMenuã©ã€ãã©ãªãšãããžã§ã¯ãããåé€ããŸãïŒã©ã¡ãããlibããã©ã«ããŒã«ãããŸãïŒã
æ°ããåé¡ãçºçããŸãã-SlidingMenuã©ã€ãã©ãªã¯å€ãã®ãšã©ãŒãå ±åããŸãã ããã¯ãåé€ãããã¡ã€ã«ãäžè¶³ããŠããããã§ãã ãã®åé¿çã¯StackOverflowã§ãèŠã€ãããŸããããããžã§ã¯ãããSupport Libã©ã€ãã©ãªãåæããŠãSlidingMenuã©ã€ãã©ãªã«æ¥ç¶ããŸãã ãã®å Žåã3ã€ãã¹ãŠã«å¿ èŠãªãã¡ã€ã«ã¯æåã«SlidingMenuã©ã€ãã©ãªã«æ¥ç¶ãããSlidingMenuã¯ãã®æ©èœãšå ±ã«ãããžã§ã¯ãã«Support Libãæ¥ç¶ããŸãã
ã³ã¡ã³ãã§ã¯ãåé¡ã¯ããå°éçãªèšèªã§èª¬æãããç°¡åãªè§£æ±ºçãææ¡ããŸããããSlidingMenuã®å€ãããŒãžã§ã³ã®ãµããŒãã©ã€ãã©ãªã«åé¡ããããã³ã³ãœãŒã«ã«ç°ãªãããã·ã¥åèšã衚瀺ããããšããã¡ãã»ãŒãžããããŸãããã¡ã€ã³ãããžã§ã¯ãããlibãã³ããŒããŠããããããã ãã§ååã§ããã SlidingMenuã§ãã
ã³ã³ãœãŒã«ã®ãšã©ãŒã«æ³šæãæããªãã£ãããããããã®åé¡ã解決ããã®ã«3æ¥ããããŸããïŒãããç§ã¯èªåã®äººçãå°ç¡ãã«ããã®ã奜ãã§ãïŒã
é£ããã§ããããããã®ãã¥ã¢ã³ã¹ãç解ããã°ããã¹ãŠãéåžžã«æ確ã§è«ççã«ãªããŸãã
èµ€ãæ¥ãããããé¿ããããã«ãã³ã³ãœãŒã«ãã¯ãªã¢ããŸãã
äžèšã®ãã¹ãŠã®åŸã MainActivity.javaã«ç§»åããŠãonCreateïŒïŒã¡ãœããã®åã«å€æ°ã宣èšããŸãã
private SlidingMenu menu;
次ã«ãã¡ãã¥ãŒåæååãonCreateã«çŽæ¥è¿œå ããŸãã
menu = new SlidingMenu(this); menu.setMode(SlidingMenu.LEFT); menu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowDrawable(R.drawable.slidemenu_shadowgradient); menu.setShadowWidth(15); menu.setFadeDegree(0.0f); menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); menu.setBehindWidth(200); menu.setMenu(R.layout.menu_frame);
ã³ãŒããèŠããšãããããã«ã圱ã®ãããã¡ã€ã«ïŒ menu.setShadowDrawableïŒ R.drawableãSlidemenu_shadowgradient ïŒ ïŒãšãå®éã«ã¯ã¡ãã¥ãŒèªäœïŒ menu.setMenuïŒ R.layoutãMenu_frame ïŒ ïŒã瀺ãããŠããŸã ã ãããã®ãã¡ã€ã«ãäœæããå¿ èŠããããŸãã 以äžã®ãã¿ãã¬ã«ãããã¹ãŠã®ãœãŒã¹ã®äŸã
ãœãŒã¹ã³ãŒã
MainActivity.java
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends ActionBarActivity { private SlidingMenu menu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); menu = new SlidingMenu(this); menu.setMode(SlidingMenu.LEFT); menu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowDrawable(R.drawable.aslidingmenu_shadowgradient); menu.setShadowWidth(15); menu.setFadeDegree(0.0f); menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); menu.setBehindWidth(200); menu.setMenu(R.layout.menu_frame); } }
res / drawable / slidemenu_shadowgradient.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:endColor="@color/purple_dark" android:startColor="@color/back" /> </shape> </item> </selector>
res / layout / menu_frame.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/back"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/menu_1" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/menu_2" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/menu_3" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/menu_4" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout>
res / values / strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">SlideMenu Demo</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <color name="back">#3d4140</color> <color name="purple_light">#ffffff</color> <color name="purple_dark">#353838</color> <string name="menu_1">Menu 1</string> <string name="menu_2">Menu 2</string> <string name="menu_3">Menu 3</string> <string name="menu_4">Menu 4</string> </resources>
æ©èœãè¿œå ãã
äžèšã®ãã¹ãŠã¯ç¢ºãã«è¯ãããšã§ãããããã€ãã®è©³çŽ°ãæ¬ ããŠããŸãã ããšãã°ãVKã¢ããªã±ãŒã·ã§ã³ã䜿çšãããšãå€ãã®å Žåããµã€ãã¡ãã¥ãŒïŒSlidingMenuïŒã«é Œããªããã°ãªããŸããã ç»é¢äžã§æãåãããŠæŒããŸãããéãæ¹æ³ã¯ããã€ããããŸãã
ActionBarã®ã¢ã€ã³ã³
ã¢ã¯ã·ã§ã³ããŒã®ãã¿ã³ã¢ã€ã³ã³ã«æ©èœãè¿œå ããã«ã¯ã MainActivity.javaã®ã©ããã«é 眮ãããŠãã次ã®ã³ãŒãã䜿çšããŸãã
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // ID case android.R.id.home: // - ActionBar, menu.toggle(true); // ( ) return true; } return super.onOptionsItemSelected(item); }
onCreateïŒïŒã®æåŸã«ã次ãè¿œå ããŸãã
getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ãšããããæåŸã®ã³ãŒãã¯ã¢ã€ã³ã³ã«çŸããç¢å°ãè¿œå ããŸãã
ãæ»ãããã¿ã³ãæŒããŠã¡ãã¥ãŒãéãã
ããã§ã¯ãã¹ãŠãã·ã³ãã«ã§ãã¡ãã¥ãŒã¯éããŠããŸããããæ»ãããã¯ãªãã¯ãããšãã¡ãã¥ãŒã§ã¯ãªãã¢ããªã±ãŒã·ã§ã³ãéããŸãã 次ã®ã³ãŒãã§ä¿®æ£ããŸãã
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // "" if(menu.isMenuShowing()){ // SlidingMenu menu.toggle(true); // return false; } } return super.onKeyDown(keyCode, event); }
ã³ã¡ã³ãã§ã¯ã onBackPressedïŒïŒ
å®å
šãªã³ãŒãMainActivity.java
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends ActionBarActivity { private SlidingMenu menu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); menu = new SlidingMenu(this); menu.setMode(SlidingMenu.LEFT); menu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowDrawable(R.drawable.actionbar_gradient); menu.setShadowWidth(15); menu.setFadeDegree(0.0f); menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); menu.setBehindWidth(200); menu.setMenu(R.layout.menu_frame); getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: menu.toggle(true); return true; } return super.onOptionsItemSelected(item); } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if(menu.isMenuShowing()){ menu.toggle(true); return false; } } return super.onKeyDown(keyCode, event); } }
çµæïŒ

ïŒæ®å¿µãªããããã®ç»é¢ã¯HabraStorageã«å®å šã«ã¯èªã¿èŸŒãŸããŸããã§ããããµãŒãããŒãã£ã®ç»åãã¹ãã£ã³ã°ã䜿çšããå¿ èŠããããŸããïŒã
çµè«ãšããŠ
èªè ããçããå¯èœæ§ã®ããè«ççãªè³ªåã«çããŸããããªãActionBar Sherlockã§ãªãã®ããïŒç¢ºãã«ãããäœããç¥ã£ãŠããå ŽåïŒïŒ
çãã¯ç°¡åã§ããäœæ¥ã®æåã«ãã®ååšãç¥ããŸããã§ããã SlidingMenuãèµ·åãããšãã«ãæšå¥šãããã·ã£ãŒããã¯ã«ã€ããŠç¥ããŸãããããµããŒãã©ã€ãã©ãªãšããã䜿çšããã³ãŒãã®ååãå€æŽããå¿ èŠã¯ãããŸããã§ããã
çµå±ã®ãšãããåé¡ã®ååã¯ãã®ãã©ãããã©ãŒã ã«ãŸã£ããé¢ä¿ããŠãããããã®ããã®ããŒã«ã«é¢ä¿ããŠãããããAndroidã®ããã°ã©ãã³ã°ãéå§ããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã
ããããäžã§èšã£ãããã«ãå°ãç解ããã ãã§ããã¹ãŠãããæ確ã«ãªããŸãã
æåŸãŸã§èªãã§ãããŠããããšãã
PSã³ãŒãã®å質ãããã¹ãã®å質ã«ã€ããŠã³ã¡ã³ããããå Žåããã¹ãŠãåãåå¿è ã®åå¿è åãã«èšèšããŠããããšãå¿ããªãã§ãã ããã
UPDïŒã³ã¡ã³ãããã³ã¡ã³ããè¿œå ããŸããã