Mega Code Archive

 
Categories / Android / UI
 

Demonstrates inflating menus from XML

/*  * Copyright (C) 2007 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.apis.app; import com.example.android.apis.R; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; /**  * Demonstrates inflating menus from XML. There are different menu XML resources  * that the user can choose to inflate. First, select an example resource from  * the spinner, and then hit the menu button. To choose another, back out of the  * activity and start over.  */ public class MenuInflateFromXml extends Activity {     /**      * Different example menu resources.      */     private static final int sMenuExampleResources[] = {         R.menu.title_only, R.menu.title_icon, R.menu.submenu, R.menu.groups,         R.menu.checkable, R.menu.shortcuts, R.menu.order, R.menu.category_order,         R.menu.visible, R.menu.disabled     };          /**      * Names corresponding to the different example menu resources.      */     private static final String sMenuExampleNames[] = {         "Title only", "Title and Icon", "Submenu", "Groups",         "Checkable", "Shortcuts", "Order", "Category and Order",         "Visible", "Disabled"     };         /**      * Lets the user choose a menu resource.      */     private Spinner mSpinner;     /**      * Shown as instructions.      */     private TextView mInstructionsText;          /**      * Safe to hold on to this.      */     private Menu mMenu;          @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);                  // Create a simple layout         LinearLayout layout = new LinearLayout(this);         layout.setOrientation(LinearLayout.VERTICAL);                  // Create the spinner to allow the user to choose a menu XML         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,                 android.R.layout.simple_spinner_item, sMenuExampleNames);          adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);         mSpinner = new Spinner(this);         // When programmatically creating views, make sure to set an ID         // so it will automatically save its instance state         mSpinner.setId(R.id.spinner);         mSpinner.setAdapter(adapter);                  // Add the spinner         layout.addView(mSpinner,                 new LinearLayout.LayoutParams(                         LinearLayout.LayoutParams.MATCH_PARENT,                         LinearLayout.LayoutParams.WRAP_CONTENT));         // Create help text         mInstructionsText = new TextView(this);         mInstructionsText.setText(getResources().getString(                 R.string.menu_from_xml_instructions_press_menu));                  // Add the help, make it look decent         LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(                 LinearLayout.LayoutParams.MATCH_PARENT,                 LinearLayout.LayoutParams.WRAP_CONTENT);         lp.setMargins(10, 10, 10, 10);         layout.addView(mInstructionsText, lp);                  // Set the layout as our content view         setContentView(layout);     }     @Override     public boolean onCreateOptionsMenu(Menu menu) {         // Hold on to this         mMenu = menu;                  // Inflate the currently selected menu XML resource.         MenuInflater inflater = getMenuInflater();         inflater.inflate(sMenuExampleResources[mSpinner.getSelectedItemPosition()], menu);                  // Disable the spinner since we've already created the menu and the user         // can no longer pick a different menu XML.         mSpinner.setEnabled(false);                  // Change instructions         mInstructionsText.setText(getResources().getString(                 R.string.menu_from_xml_instructions_go_back));                  return true;     }     @Override     public boolean onOptionsItemSelected(MenuItem item) {         switch (item.getItemId()) {             // For "Title only": Examples of matching an ID with one assigned in             //                   the XML             case R.id.jump:                 Toast.makeText(this, "Jump up in the air!", Toast.LENGTH_SHORT).show();                 return true;             case R.id.dive:                 Toast.makeText(this, "Dive into the water!", Toast.LENGTH_SHORT).show();                 return true;             // For "Groups": Toggle visibility of grouped menu items with             //               nongrouped menu items             case R.id.browser_visibility:                 // The refresh item is part of the browser group                 final boolean shouldShowBrowser = !mMenu.findItem(R.id.refresh).isVisible();                 mMenu.setGroupVisible(R.id.browser, shouldShowBrowser);                 break;                              case R.id.email_visibility:                 // The reply item is part of the email group                 final boolean shouldShowEmail = !mMenu.findItem(R.id.reply).isVisible();                 mMenu.setGroupVisible(R.id.email, shouldShowEmail);                 break;                              // Generic catch all for all the other menu resources             default:                 // Don't toast text when a submenu is clicked                 if (!item.hasSubMenu()) {                     Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();                     return true;                 }                 break;         }                  return false;     }           } //res\menu\category_order.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <!-- This group uses the default category. -->     <group android:id="@+id/most_used_items">              <item android:id="@+id/last_most_item"             android:orderInCategory="10"             android:title="@string/last_most_often" />              <item android:id="@+id/middle_most_item"             android:orderInCategory="7"             android:title="@string/middle_most_often" />              <item android:id="@+id/first_most_item"             android:orderInCategory="4"             android:title="@string/first_most_often" />          </group>          <!-- This group uses the secondary category, which is used for less oftenly used items.          Notice these items will show up after the above items.          (Furthermore, notice how the orders in each category are independent from the other          category.) -->     <group android:id="@+id/least_used_items"         android:menuCategory="secondary">                  <item android:id="@+id/last_least_item"             android:orderInCategory="3"             android:title="@string/last_least_often" />              <item android:id="@+id/middle_least_item"             android:orderInCategory="2"             android:title="@string/middle_least_often" />              <item android:id="@+id/first_least_item"             android:orderInCategory="0"             android:title="@string/first_least_often" />          </group> </menu> //res\menu\checkable.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <!-- Checkable items appear only in submenus or context menus. -->     <!-- Carefully look at the attribute name checkableBehavior on groups, but          the attribute name checkable on items. The checkableBehavior encompasses          the number of items that will be checkable within that group. -->     <item android:title="None">         <menu>             <!-- The none checkableBehavior is default, but we explicitly show it here. -->             <group android:id="@+id/noncheckable_group"                     android:checkableBehavior="none">                 <!-- Notice how these items inherit from the group. -->                 <item android:id="@+id/noncheckable_item_1"                         android:title="@string/item_1" />                 <item android:id="@+id/noncheckable_item_2"                         android:title="@string/item_2" />                 <item android:id="@+id/noncheckable_item_3"                         android:title="@string/item_3" />             </group>         </menu>     </item>     <item android:title="All">         <menu>             <group android:id="@+id/checkable_group"                     android:checkableBehavior="all">                 <!-- Notice how these items inherit from the group. -->                 <item android:id="@+id/checkable_item_1"                         android:title="@string/item_1" />                 <item android:id="@+id/checkable_item_2"                         android:title="@string/item_2"                         android:checked="true" />                 <item android:id="@+id/checkable_item_3"                         android:title="@string/item_3"                         android:checked="true" />             </group>         </menu>     </item>     <item android:title="Single">         <menu>             <group android:id="@+id/exclusive_checkable_group"                     android:checkableBehavior="single">                 <!-- Notice how these items inherit from the group. -->                 <item android:id="@+id/exclusive_checkable_item_1"                         android:title="@string/item_1" />                 <item android:id="@+id/exclusive_checkable_item_2"                         android:title="@string/item_2" />                 <item android:id="@+id/exclusive_checkable_item_3"                         android:title="@string/item_3"                         android:checked="true" />             </group>         </menu>     </item>     <item android:title="All without group">         <menu>             <!-- Notice how these items have each set. -->             <item android:id="@+id/nongroup_checkable_item_1"                     android:title="@string/item_1"                     android:checkable="true" />             <item android:id="@+id/nongroup_checkable_item_2"                     android:title="@string/item_2"                     android:checkable="true"                     android:checked="true" />             <item android:id="@+id/nongroup_checkable_item_3"                     android:title="@string/item_3"                     android:checkable="true"                     android:checked="true" />         </menu>     </item> </menu> //res\menu\disabled.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <item android:id="@+id/enabled_item"         android:title="Enabled"         android:icon="@drawable/stat_happy" />     <item android:id="@+id/disabled_item"         android:title="Disabled"         android:enabled="false"         android:icon="@drawable/stat_sad" />     <item android:id="@+id/enabled_item_2"         android:title="Enabled"         android:icon="@drawable/stat_happy" />     <item android:id="@+id/disabled_item_2"         android:title="Disabled"         android:enabled="false"         android:icon="@drawable/stat_sad" />     <item android:id="@+id/enabled_item_3"         android:title="Enabled"         android:icon="@drawable/stat_happy" />     <item android:id="@+id/disabled_item_3"         android:title="Disabled"         android:enabled="false"         android:icon="@drawable/stat_sad" />     <item android:id="@+id/enabled_item_4"         android:title="Enabled"         android:icon="@drawable/stat_happy" />     <item android:id="@+id/disabled_item_4"         android:title="Disabled"         android:enabled="false"         android:icon="@drawable/stat_sad" /> </menu> //res\menu\groups.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <item android:id="@+id/browser_visibility"         android:title="@string/browser_visibility" />     <group android:id="@+id/browser">              <item android:id="@+id/refresh"             android:title="@string/browser_refresh" />              <item android:id="@+id/bookmark"             android:title="@string/browser_bookmark" />          </group>     <item android:id="@+id/email_visibility"         android:title="@string/email_visibility" />     <group android:id="@+id/email">              <item android:id="@+id/reply"             android:title="@string/email_reply" />              <item android:id="@+id/forward"             android:title="@string/email_forward" />          </group> </menu> //res\menu\order.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <!-- These are in reverse order in this resource, but the orderInCategory attribute will          order them for the menu (they all have the same default category). -->     <item android:id="@+id/fourth_item"         android:orderInCategory="3"         android:title="Fourth" />     <item android:id="@+id/third_item"         android:orderInCategory="2"         android:title="Third" />     <item android:id="@+id/second_item"         android:orderInCategory="1"         android:title="Second" />     <item android:id="@+id/first_item"         android:orderInCategory="0"         android:title="First" /> </menu> //res\menu\shortcuts.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <item android:id="@+id/invisible_item"         android:visible="false"         android:alphabeticShortcut="i"         android:title="Invisible item" />     <item android:id="@+id/a_item"         android:alphabeticShortcut="a"         android:title="Alvin" />     <item android:id="@+id/b_item"         android:alphabeticShortcut="b"         android:title="Bart" />     <item android:id="@+id/c_item"         android:alphabeticShortcut="c"         android:title="Chris" />     <item android:id="@+id/d_item"         android:alphabeticShortcut="d"         android:title="David" />     <item android:id="@+id/e_item"         android:alphabeticShortcut="e"         android:title="Eric" />     <item android:id="@+id/f_item"         android:alphabeticShortcut="f"         android:title="Frank" />     <item android:id="@+id/g_item"         android:alphabeticShortcut="g"         android:title="Gary" />     <item android:id="@+id/h_item"         android:alphabeticShortcut="h"         android:title="Henry" />     <item android:id="@+id/excl_item"         android:alphabeticShortcut="!"         android:title="Exclamation" /> </menu> //res\menu\submenu.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <item android:title="Normal 1" />     <item android:id="@+id/submenu"         android:title="Emotions">         <menu>                     <item android:id="@+id/happy"                 android:title="Happy"                 android:icon="@drawable/stat_happy" />                      <item android:id="@+id/neutral"                 android:title="Neutral"                 android:icon="@drawable/stat_neutral" />                      <item android:id="@+id/sad"                 android:title="Sad"                 android:icon="@drawable/stat_sad" />                  </menu>          </item>     <item android:title="Normal 2" /> </menu> //res\menu\title_icon.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <item android:id="@+id/happy"         android:title="Happy"         android:icon="@drawable/stat_happy" />     <item android:id="@+id/neutral"         android:title="Neutral"         android:icon="@drawable/stat_neutral" />     <item android:id="@+id/sad"         android:title="Sad"         android:icon="@drawable/stat_sad" /> </menu> //res\menu\title_only.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <item android:id="@+id/jump"         android:title="@string/jump" />     <item android:id="@+id/dive"         android:title="@string/dive" /> </menu> //res\menu\visible.xml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 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. --> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <item android:id="@+id/visible_item"         android:title="Visible"         android:alphabeticShortcut="a" />     <item android:id="@+id/hidden_item"         android:title="Hidden"         android:visible="false"         android:alphabeticShortcut="b" />     <group android:id="@+id/hidden_group"         android:visible="false">              <item android:id="@+id/hidden_by_group"             android:title="Hidden by group"             android:alphabeticShortcut="c" />          </group> </menu>