diff --git a/samples/training/NavigationDrawer/AndroidManifest.xml b/samples/training/NavigationDrawer/AndroidManifest.xml new file mode 100755 index 000000000..e48ee243b --- /dev/null +++ b/samples/training/NavigationDrawer/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/training/NavigationDrawer/libs/android-support-v4.jar b/samples/training/NavigationDrawer/libs/android-support-v4.jar new file mode 100644 index 000000000..ee6f13aa8 Binary files /dev/null and b/samples/training/NavigationDrawer/libs/android-support-v4.jar differ diff --git a/samples/training/NavigationDrawer/res/drawable-hdpi/action_search.png b/samples/training/NavigationDrawer/res/drawable-hdpi/action_search.png new file mode 100755 index 000000000..f12e005eb Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-hdpi/action_search.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-hdpi/drawer_shadow.9.png b/samples/training/NavigationDrawer/res/drawable-hdpi/drawer_shadow.9.png new file mode 100644 index 000000000..224cc4ff4 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-hdpi/drawer_shadow.9.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-hdpi/ic_drawer.png b/samples/training/NavigationDrawer/res/drawable-hdpi/ic_drawer.png new file mode 100644 index 000000000..ff7b1def9 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-hdpi/ic_drawer.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-hdpi/ic_launcher.png b/samples/training/NavigationDrawer/res/drawable-hdpi/ic_launcher.png new file mode 100755 index 000000000..b460d6021 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-hdpi/ic_launcher.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-mdpi/action_search.png b/samples/training/NavigationDrawer/res/drawable-mdpi/action_search.png new file mode 100755 index 000000000..587d9e0bf Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-mdpi/action_search.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-mdpi/drawer_shadow.9.png b/samples/training/NavigationDrawer/res/drawable-mdpi/drawer_shadow.9.png new file mode 100644 index 000000000..3797f99c0 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-mdpi/drawer_shadow.9.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-mdpi/ic_drawer.png b/samples/training/NavigationDrawer/res/drawable-mdpi/ic_drawer.png new file mode 100644 index 000000000..fb681ba26 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-mdpi/ic_drawer.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-mdpi/ic_launcher.png b/samples/training/NavigationDrawer/res/drawable-mdpi/ic_launcher.png new file mode 100755 index 000000000..dee53f408 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-mdpi/ic_launcher.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-xhdpi/action_search.png b/samples/training/NavigationDrawer/res/drawable-xhdpi/action_search.png new file mode 100755 index 000000000..3549f84dd Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-xhdpi/action_search.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-xhdpi/drawer_shadow.9.png b/samples/training/NavigationDrawer/res/drawable-xhdpi/drawer_shadow.9.png new file mode 100644 index 000000000..fa3d853e9 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-xhdpi/drawer_shadow.9.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-xhdpi/ic_drawer.png b/samples/training/NavigationDrawer/res/drawable-xhdpi/ic_drawer.png new file mode 100644 index 000000000..b9bc3d70f Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-xhdpi/ic_drawer.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-xhdpi/ic_launcher.png b/samples/training/NavigationDrawer/res/drawable-xhdpi/ic_launcher.png new file mode 100755 index 000000000..d4e121531 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-xhdpi/ic_launcher.png differ diff --git a/samples/training/NavigationDrawer/res/drawable-xxhdpi/ic_launcher.png b/samples/training/NavigationDrawer/res/drawable-xxhdpi/ic_launcher.png new file mode 100755 index 000000000..2cc3275b7 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/samples/training/NavigationDrawer/res/drawable/earth.jpg b/samples/training/NavigationDrawer/res/drawable/earth.jpg new file mode 100644 index 000000000..6cabbf4ac Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable/earth.jpg differ diff --git a/samples/training/NavigationDrawer/res/drawable/jupiter.jpg b/samples/training/NavigationDrawer/res/drawable/jupiter.jpg new file mode 100644 index 000000000..24e8eea35 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable/jupiter.jpg differ diff --git a/samples/training/NavigationDrawer/res/drawable/mars.jpg b/samples/training/NavigationDrawer/res/drawable/mars.jpg new file mode 100644 index 000000000..db253ef5e Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable/mars.jpg differ diff --git a/samples/training/NavigationDrawer/res/drawable/mercury.jpg b/samples/training/NavigationDrawer/res/drawable/mercury.jpg new file mode 100644 index 000000000..531790b99 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable/mercury.jpg differ diff --git a/samples/training/NavigationDrawer/res/drawable/neptune.jpg b/samples/training/NavigationDrawer/res/drawable/neptune.jpg new file mode 100644 index 000000000..88467c5f7 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable/neptune.jpg differ diff --git a/samples/training/NavigationDrawer/res/drawable/saturn.jpg b/samples/training/NavigationDrawer/res/drawable/saturn.jpg new file mode 100644 index 000000000..8219d1879 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable/saturn.jpg differ diff --git a/samples/training/NavigationDrawer/res/drawable/uranus.jpg b/samples/training/NavigationDrawer/res/drawable/uranus.jpg new file mode 100644 index 000000000..fa32e3796 Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable/uranus.jpg differ diff --git a/samples/training/NavigationDrawer/res/drawable/venus.jpg b/samples/training/NavigationDrawer/res/drawable/venus.jpg new file mode 100644 index 000000000..e04f0789e Binary files /dev/null and b/samples/training/NavigationDrawer/res/drawable/venus.jpg differ diff --git a/samples/training/NavigationDrawer/res/layout/activity_main.xml b/samples/training/NavigationDrawer/res/layout/activity_main.xml new file mode 100755 index 000000000..f097cd000 --- /dev/null +++ b/samples/training/NavigationDrawer/res/layout/activity_main.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + diff --git a/samples/training/NavigationDrawer/res/layout/drawer_list_item.xml b/samples/training/NavigationDrawer/res/layout/drawer_list_item.xml new file mode 100644 index 000000000..ab525754f --- /dev/null +++ b/samples/training/NavigationDrawer/res/layout/drawer_list_item.xml @@ -0,0 +1,27 @@ + + + \ No newline at end of file diff --git a/samples/training/NavigationDrawer/res/layout/fragment_planet.xml b/samples/training/NavigationDrawer/res/layout/fragment_planet.xml new file mode 100644 index 000000000..4fe5bbe61 --- /dev/null +++ b/samples/training/NavigationDrawer/res/layout/fragment_planet.xml @@ -0,0 +1,23 @@ + + + diff --git a/samples/training/NavigationDrawer/res/menu/main.xml b/samples/training/NavigationDrawer/res/menu/main.xml new file mode 100644 index 000000000..970c16a91 --- /dev/null +++ b/samples/training/NavigationDrawer/res/menu/main.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/samples/training/NavigationDrawer/res/values/strings.xml b/samples/training/NavigationDrawer/res/values/strings.xml new file mode 100755 index 000000000..3112f4079 --- /dev/null +++ b/samples/training/NavigationDrawer/res/values/strings.xml @@ -0,0 +1,33 @@ + + + + Navigation Drawer Example + + Mercury + Venus + Earth + Mars + Jupiter + Saturn + Uranus + Neptune + + Open navigation drawer + Close navigation drawer + Web search + Sorry, there\'s no web browser available + diff --git a/samples/training/NavigationDrawer/src/com/example/android/navigationdrawerexample/MainActivity.java b/samples/training/NavigationDrawer/src/com/example/android/navigationdrawerexample/MainActivity.java new file mode 100755 index 000000000..70ffac3a3 --- /dev/null +++ b/samples/training/NavigationDrawer/src/com/example/android/navigationdrawerexample/MainActivity.java @@ -0,0 +1,240 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.navigationdrawerexample; + +import java.util.Locale; + +import android.app.Activity; +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.SearchManager; +import android.content.Intent; +import android.content.res.Configuration; +import android.os.Bundle; +import android.support.v4.app.ActionBarDrawerToggle; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.Toast; + +/** + * This example illustrates a common usage of the DrawerLayout widget + * in the Android support library. + *

+ *

When a navigation (left) drawer is present, the host activity should detect presses of + * the action bar's Up affordance as a signal to open and close the navigation drawer. The + * ActionBarDrawerToggle facilitates this behavior. + * Items within the drawer should fall into one of two categories:

+ *

+ *

+ *

+ *

Right side drawers should be used for actions, not navigation. This follows the pattern + * established by the Action Bar that navigation should be to the left and actions to the right. + * An action should be an operation performed on the current contents of the window, + * for example enabling or disabling a data overlay on top of the current content.

+ */ +public class MainActivity extends Activity { + private DrawerLayout mDrawerLayout; + private ListView mDrawerList; + private ActionBarDrawerToggle mDrawerToggle; + + private CharSequence mDrawerTitle; + private CharSequence mTitle; + private String[] mPlanetTitles; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + mTitle = mDrawerTitle = getTitle(); + mPlanetTitles = getResources().getStringArray(R.array.planets_array); + mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + mDrawerList = (ListView) findViewById(R.id.left_drawer); + + // set a custom shadow that overlays the main content when the drawer opens + mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); + // set up the drawer's list view with items and click listener + mDrawerList.setAdapter(new ArrayAdapter(this, + R.layout.drawer_list_item, mPlanetTitles)); + mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); + + // enable ActionBar app icon to behave as action to toggle nav drawer + getActionBar().setDisplayHomeAsUpEnabled(true); + getActionBar().setHomeButtonEnabled(true); + + // ActionBarDrawerToggle ties together the the proper interactions + // between the sliding drawer and the action bar app icon + mDrawerToggle = new ActionBarDrawerToggle( + this, /* host Activity */ + mDrawerLayout, /* DrawerLayout object */ + R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ + R.string.drawer_open, /* "open drawer" description for accessibility */ + R.string.drawer_close /* "close drawer" description for accessibility */ + ) { + public void onDrawerClosed(View view) { + getActionBar().setTitle(mTitle); + invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() + } + + public void onDrawerOpened(View drawerView) { + getActionBar().setTitle(mDrawerTitle); + invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() + } + }; + mDrawerLayout.setDrawerListener(mDrawerToggle); + + if (savedInstanceState == null) { + selectItem(0); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + /* Called whenever we call invalidateOptionsMenu() */ + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + // If the nav drawer is open, hide action items related to the content view + boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); + menu.findItem(R.id.action_websearch).setVisible(!drawerOpen); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // The action bar home/up action should open or close the drawer. + // ActionBarDrawerToggle will take care of this. + if (mDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + // Handle action buttons + switch(item.getItemId()) { + case R.id.action_websearch: + // create intent to perform web search for this planet + Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); + intent.putExtra(SearchManager.QUERY, getActionBar().getTitle()); + // catch event that there's no activity to handle intent + if (intent.resolveActivity(getPackageManager()) != null) { + startActivity(intent); + } else { + Toast.makeText(this, R.string.app_not_available, Toast.LENGTH_LONG).show(); + } + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + /* The click listner for ListView in the navigation drawer */ + private class DrawerItemClickListener implements ListView.OnItemClickListener { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + selectItem(position); + } + } + + private void selectItem(int position) { + // update the main content by replacing fragments + Fragment fragment = new PlanetFragment(); + Bundle args = new Bundle(); + args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position); + fragment.setArguments(args); + + FragmentManager fragmentManager = getFragmentManager(); + fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); + + // update selected item and title, then close the drawer + mDrawerList.setItemChecked(position, true); + setTitle(mPlanetTitles[position]); + mDrawerLayout.closeDrawer(mDrawerList); + } + + @Override + public void setTitle(CharSequence title) { + mTitle = title; + getActionBar().setTitle(mTitle); + } + + /** + * When using the ActionBarDrawerToggle, you must call it during + * onPostCreate() and onConfigurationChanged()... + */ + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + mDrawerToggle.syncState(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // Pass any configuration change to the drawer toggls + mDrawerToggle.onConfigurationChanged(newConfig); + } + + /** + * Fragment that appears in the "content_frame", shows a planet + */ + public static class PlanetFragment extends Fragment { + public static final String ARG_PLANET_NUMBER = "planet_number"; + + public PlanetFragment() { + // Empty constructor required for fragment subclasses + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_planet, container, false); + int i = getArguments().getInt(ARG_PLANET_NUMBER); + String planet = getResources().getStringArray(R.array.planets_array)[i]; + + int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()), + "drawable", getActivity().getPackageName()); + ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId); + getActivity().setTitle(planet); + return rootView; + } + } +} \ No newline at end of file