- Xampp/Wamp
- Eclipse
- SDK/Emulator
- Notepad
Buat sebuah project baru di Eclipse IDE,
1. Buat project baru di Eclipse IDE File ⇒ New ⇒ Android Project dan berikan Activity dengan nama class MainScreenActivity.
2. Buka file strings.xml, di res ⇒ values, kemudian modifikasi file tersebut seperti kode dibawah ini :
<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="app_name">Slider Menu</string><stringname="action_settings">Settings</string><stringname="hello_world">Hello world!</string><stringname="drawer_open">Slider Menu Opened</string><stringname="drawer_close">Slider Menu Closed</string><string-arrayname="nav_drawer_items">
<item>Home</item><item>Find People</item><item>Photos</item><item>Communities</item><item>Pages</item><item>What\'s Hot</item></string-array><arrayname="nav_drawer_icons">
<item>@drawable/ic_home</item><item>@drawable/ic_people</item><item>@drawable/ic_photos</item><item>@drawable/ic_communities</item><item>@drawable/ic_pages</item><item>@drawable/ic_whats_hot</item></array><stringname="desc_list_item_icon">Item Icon</string>
</resources>
3. Buka file activity_main.xml, di res ⇒ layout, kemudian modifikasi file tersebut seperti kode dibawah ini :
<android.support.v4.widget.DrawerLayoutandroid:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"><!-- Framelayout to display Fragments --><FrameLayoutandroid:id="@+id/frame_container"android:layout_width="match_parent"android:layout_height="match_parent"/><!-- Listview to display slider menu --><ListViewandroid:id="@+id/list_slidermenu"android:layout_width="240dp"android:layout_height="match_parent"android:layout_gravity="start"android:choiceMode="singleChoice"android:divider="@color/list_divider"android:dividerHeight="1dp"android:listSelector="@drawable/list_selector"android:background="@color/list_background"/></android.support.v4.widget.DrawerLayout>
4. Buat file xml baru di folder res ⇒ drawable dengan nama file list_item_bg_normal.xml, kemudian modifikasi file tersebut seperti kode dibawah ini :
android:shape="rectangle"><gradientandroid:startColor="@color/list_background"android:endColor="@color/list_background"android:angle="90"/></shape>
5. Buat file xml baru di folder res ⇒ drawable dengan nama file list_item_bg_pressed.xml, kemudian modifikasi file tersebut seperti kode dibawah ini :
android:shape="rectangle"><gradientandroid:startColor="@color/list_background_pressed"android:endColor="@color/list_background_pressed"android:angle="90"/></shape>
6. Buat file xml baru di folder res ⇒ drawable dengan nama file list_selector.xml, kemudian modifikasi file tersebut seperti kode dibawah ini :
<?xmlversion="1.0"encoding="utf-8"?><itemandroid:drawable="@drawable/list_item_bg_normal"android:state_activated="false"/><itemandroid:drawable="@drawable/list_item_bg_pressed"android:state_pressed="true"/><itemandroid:drawable="@drawable/list_item_bg_pressed"android:state_activated="true"/></selector>
7. Buat file xml baru di folder res ⇒ drawable dengan nama file counter_bg.xml, kemudian modifikasi file tersebut seperti kode dibawah ini :
<?xmlversion="1.0"encoding="utf-8"?>android:shape="rectangle"><solidandroid:color="@color/counter_text_bg">
</solid><padding
android:right="3dp"android:left="3dp"></padding><cornersandroid:radius="2dp">
</corners></shape>
8. Buat file xml baru di folder res ⇒ layout dengan nama file drawer_list_item.xml, kemudian modifikasi file tersebut seperti kode dibawah ini :
<?xmlversion="1.0"encoding="utf-8"?>android:layout_width="match_parent"android:layout_height="48dp"android:background="@drawable/list_selector"><ImageViewandroid:id="@+id/icon"android:layout_width="25dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_marginLeft="12dp"android:layout_marginRight="12dp"android:contentDescription="@string/desc_list_item_icon"android:src="@drawable/ic_home"android:layout_centerVertical="true"/><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_toRightOf="@id/icon"android:minHeight="?android:attr/listPreferredItemHeightSmall"android:textAppearance="?android:attr/textAppearanceListItemSmall"android:textColor="@color/list_item_title"android:gravity="center_vertical"android:paddingRight="40dp"/><TextViewandroid:id="@+id/counter"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/counter_bg"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="8dp"android:textColor="@color/counter_text_color"/></RelativeLayout>
9. Buat package baru dengan nama package al.ambari.slidingmenu.model
10. Buat class baru di dalam package al.ambari.slidingmenu.model, dengan nama class NavDrawerItem.java, kemudian modifikasi file tersebut seperti kode dibawah ini :
packageal.ambari.slidingmenu.model;publicclassNavDrawerItem {privateString title;privateinticon;privateString count ="0";privatebooleanisCounterVisible =false;
publicNavDrawerItem(){}publicNavDrawerItem(String title,inticon){this.title = title;this.icon = icon;}publicNavDrawerItem(String title,inticon,booleanisCounterVisible, String count){this.title = title;this.icon = icon;this.isCounterVisible = isCounterVisible;this.count = count;}publicString getTitle(){returnthis.title;}publicintgetIcon(){returnthis.icon;}publicString getCount(){returnthis.count;}publicbooleangetCounterVisibility(){returnthis.isCounterVisible;}publicvoidsetTitle(String title){this.title = title;}publicvoidsetIcon(inticon){this.icon = icon;}publicvoidsetCount(String count){this.count = count;}publicvoidsetCounterVisibility(booleanisCounterVisible){this.isCounterVisible = isCounterVisible;}}
11. Buat package baru dengan nama package al.ambari.slidingmenu.model
12. Buat class baru di dalam package al.ambari.slidingmenu.adapter, dengan nama class NavDrawerListAdapter.java, kemudian modifikasi file tersebut seperti kode dibawah ini :
packageal.ambari.slidingmenu.adapter;importal.ambari.slidingmenu.R;importal.ambari.slidingmenu.model.NavDrawerItem;importjava.util.ArrayList;importandroid.app.Activity;importandroid.content.Context;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;importandroid.widget.TextView;publicclassNavDrawerListAdapterextendsBaseAdapter {privateContext context;privateArrayList<NavDrawerItem> navDrawerItems;publicNavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){this.context = context;this.navDrawerItems = navDrawerItems;}@OverridepublicintgetCount() {returnnavDrawerItems.size();}@OverridepublicObject getItem(intposition) {returnnavDrawerItems.get(position);}@OverridepubliclonggetItemId(intposition) {returnposition;}@OverridepublicView getView(intposition, View convertView, ViewGroup parent) {if(convertView ==null) {LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);convertView = mInflater.inflate(R.layout.drawer_list_item,null);}ImageView imgIcon = (ImageView) convertView.findViewById(R.id.icon);TextView txtTitle = (TextView) convertView.findViewById(R.id.title);TextView txtCount = (TextView) convertView.findViewById(R.id.counter);imgIcon.setImageResource(navDrawerItems.get(position).getIcon());txtTitle.setText(navDrawerItems.get(position).getTitle());if(navDrawerItems.get(position).getCounterVisibility()){
txtCount.setText(navDrawerItems.get(position).getCount());}else{txtCount.setVisibility(View.GONE);
}returnconvertView;}}
13. Buka kembali file MainScreenActivity, kemudian modifikasi file tersebut seperti kode dibawah ini :
publicclassMainActivityextendsActivity {privateDrawerLayout mDrawerLayout;privateListView mDrawerList;privateActionBarDrawerToggle mDrawerToggle;privateCharSequence mDrawerTitle;
privateCharSequence mTitle;
privateString[] navMenuTitles;
privateTypedArray navMenuIcons;privateArrayList<NavDrawerItem> navDrawerItems;privateNavDrawerListAdapter adapter;@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTitle = mDrawerTitle = getTitle();navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);mDrawerList = (ListView) findViewById(R.id.list_slidermenu);navDrawerItems =newArrayList<NavDrawerItem>();navDrawerItems.add(newNavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1),true,"22"));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1),true,"50+"));
navMenuIcons.recycle();
adapter =newNavDrawerListAdapter(getApplicationContext(),
navDrawerItems);mDrawerList.setAdapter(adapter);getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);mDrawerToggle =newActionBarDrawerToggle(this, mDrawerLayout,R.drawable.ic_drawer,//nav menu toggle iconR.string.app_name,// nav drawer open - description for accessibilityR.string.app_name// nav drawer close - description for accessibility){publicvoidonDrawerClosed(View view) {getActionBar().setTitle(mTitle);invalidateOptionsMenu();
}publicvoidonDrawerOpened(View drawerView) {getActionBar().setTitle(mDrawerTitle);invalidateOptionsMenu();
}};mDrawerLayout.setDrawerListener(mDrawerToggle);if(savedInstanceState ==null) {displayView(0);
}}@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);returntrue;}@OverridepublicbooleanonOptionsItemSelected(MenuItem item) {if(mDrawerToggle.onOptionsItemSelected(item)) {
returntrue;}switch(item.getItemId()) {
caseR.id.action_settings:returntrue;default:returnsuper.onOptionsItemSelected(item);}}@Override
publicbooleanonPrepareOptionsMenu(Menu menu) {booleandrawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);returnsuper.onPrepareOptionsMenu(menu);}@OverridepublicvoidsetTitle(CharSequence title) {mTitle = title;getActionBar().setTitle(mTitle);}@Override
protectedvoidonPostCreate(Bundle savedInstanceState) {super.onPostCreate(savedInstanceState);mDrawerToggle.syncState();
}@OverridepublicvoidonConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);mDrawerToggle.onConfigurationChanged(newConfig);
}
14. Buat class baru di dalam package al.ambari.slidingmenu, dengan nama class HomeFragment.java, kemudian modifikasi file tersebut seperti kode dibawah ini :
packageal.ambari.slidingmenu;importandroid.app.Fragment;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;publicclassHomeFragmentextendsFragment {publicHomeFragment(){}@OverridepublicView onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rootView = inflater.inflate(R.layout.fragment_home, container,false);returnrootView;}}
15. Buat file xml baru di folder res ⇒ layout dengan nama file fragment_home.xml, kemudian modifikasi file tersebut seperti kode dibawah ini :
<?xmlversion="1.0"encoding="utf-8"?>android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/txtLabel"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:textSize="16dp"android:text="Home View"/><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/txtLabel"android:src="@drawable/ic_home"android:layout_centerHorizontal="true"android:layout_marginTop="10dp"/></RelativeLayout>
16. Final Script
packageal.ambari.slidingmenu;importal.ambari.slidingmenu.adapter.NavDrawerListAdapter;importal.ambari.slidingmenu.model.NavDrawerItem;importjava.util.ArrayList;importandroid.app.Activity;importandroid.app.Fragment;importandroid.app.FragmentManager;importandroid.content.res.Configuration;importandroid.content.res.TypedArray;importandroid.os.Bundle;importandroid.support.v4.app.ActionBarDrawerToggle;importandroid.support.v4.widget.DrawerLayout;importandroid.util.Log;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.AdapterView;importandroid.widget.ListView;publicclassMainActivityextendsActivity {privateDrawerLayout mDrawerLayout;privateListView mDrawerList;privateActionBarDrawerToggle mDrawerToggle;privateCharSequence mDrawerTitle;
privateCharSequence mTitle;
privateString[] navMenuTitles;
privateTypedArray navMenuIcons;privateArrayList<NavDrawerItem> navDrawerItems;privateNavDrawerListAdapter adapter;@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTitle = mDrawerTitle = getTitle();navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);mDrawerList = (ListView) findViewById(R.id.list_slidermenu);navDrawerItems =newArrayList<NavDrawerItem>();navDrawerItems.add(newNavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1),true,"22"));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
navDrawerItems.add(newNavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1),true,"50+"));
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(newSlideMenuClickListener());adapter =newNavDrawerListAdapter(getApplicationContext(),
navDrawerItems);mDrawerList.setAdapter(adapter);// enabling action bar app icon and behaving it as toggle buttongetActionBar().setDisplayHomeAsUpEnabled(true);getActionBar().setHomeButtonEnabled(true);mDrawerToggle =newActionBarDrawerToggle(this, mDrawerLayout,R.drawable.ic_drawer,//nav menu toggle iconR.string.app_name,// nav drawer open - description for accessibilityR.string.app_name// nav drawer close - description for accessibility) {publicvoidonDrawerClosed(View view) {getActionBar().setTitle(mTitle);invalidateOptionsMenu();
}publicvoidonDrawerOpened(View drawerView) {getActionBar().setTitle(mDrawerTitle);invalidateOptionsMenu();
}};mDrawerLayout.setDrawerListener(mDrawerToggle);if(savedInstanceState ==null) {displayView(0);
}}privateclassSlideMenuClickListenerimplements
ListView.OnItemClickListener {@OverridepublicvoidonItemClick(AdapterView<?> parent, View view,intposition,longid) {displayView(position);
}}@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);returntrue;}@OverridepublicbooleanonOptionsItemSelected(MenuItem item) {if(mDrawerToggle.onOptionsItemSelected(item)) {
returntrue;}switch(item.getItemId()) {
caseR.id.action_settings:returntrue;default:returnsuper.onOptionsItemSelected(item);}}@Override
publicbooleanonPrepareOptionsMenu(Menu menu) {booleandrawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);returnsuper.onPrepareOptionsMenu(menu);}privatevoiddisplayView(intposition) {
Fragment fragment =null;
switch(position) {case0:fragment =newHomeFragment();break;case1:fragment =newFindPeopleFragment();break;case2:fragment =newPhotosFragment();break;case3:fragment =newCommunityFragment();break;case4:fragment =newPagesFragment();break;case5:fragment =newWhatsHotFragment();break;default:break;}if(fragment !=null) {FragmentManager fragmentManager = getFragmentManager();fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();mDrawerList.setItemChecked(position,true);
mDrawerList.setSelection(position);setTitle(navMenuTitles[position]);mDrawerLayout.closeDrawer(mDrawerList);}else{Log.e("MainActivity","Error in creating fragment");
}}@OverridepublicvoidsetTitle(CharSequence title) {mTitle = title;getActionBar().setTitle(mTitle);}@Override
protectedvoidonPostCreate(Bundle savedInstanceState) {super.onPostCreate(savedInstanceState);mDrawerToggle.syncState();
}@OverridepublicvoidonConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);mDrawerToggle.onConfigurationChanged(newConfig);
}}
0 comments:
Post a Comment