新建項目:
項目結構:
drawable-hdpi文件夾中的圖片是自己加入的。主要是在菜單選項中顯示的圖片:
運行效果:
代碼部分:
main.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <!-- 菜單選項的布局,設置高為"65sp",位置是在父窗口的底部,設置為不可見--> 8 <GridView 9 android:id="@+id/gv_buttom_menu" 10 android:layout_width="fill_parent" 11 android:layout_height="65sp" 12 android:layout_alignParentBottom="true" 13 android:visibility="gone" 14 ></GridView> 15 </RelativeLayout>
item_menu.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="wrap_content" 5 android:paddingBottom="5dip" 6 > 7 <!-- 這個布局文件是用來布局菜單選項的 --> 8 <!-- 菜單中圖片的顯示 --> 9 <ImageView 10 android:id="@+id/item_image" 11 android:layout_centerHorizontal="true" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content" 14 ></ImageView> 15 <!-- 菜單中圖片下面的文字 --> 16 <TextView 17 android:id="@+id/item_text" 18 android:layout_below="@id/item_image" 19 android:layout_width="wrap_content" 20 android:layout_height="wrap_content" 21 android:layout_centerHorizontal="true" 22 ></TextView> 23 </RelativeLayout>
MainActivity.java
1 package com.b510; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.view.Gravity; 9 import android.view.KeyEvent; 10 import android.view.View; 11 import android.widget.GridView; 12 import android.widget.SimpleAdapter; 13 14 public class MainActivity extends Activity { 15 /** 定義底部菜單選項 */ 16 GridView gv_buttom_menu; 17 18 /** Called when the activity is first created. */ 19 @Override 20 public void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.main); 23 } 24 25 /** 26 * 當按鍵被按下的時候調用此方法 27 */ 28 @Override 29 public boolean onKeyDown(int keyCode, KeyEvent event) { 30 if (keyCode == KeyEvent.KEYCODE_MENU) { 31 if (gv_buttom_menu == null) { 32 loadButtomMenu(); 33 } 34 // 默認情況下面是View.GONE 35 if (gv_buttom_menu.getVisibility() == View.GONE) { 36 gv_buttom_menu.setVisibility(View.VISIBLE);// 菜單設置可見 37 } else { 38 gv_buttom_menu.setVisibility(View.GONE);// 菜單設置不可見 39 } 40 } 41 42 return super.onKeyDown(keyCode, event); 43 } 44 45 /** 46 * 加載菜單 47 */ 48 private void loadButtomMenu() { 49 gv_buttom_menu = (GridView) findViewById(R.id.gv_buttom_menu); 50 // 設置菜單選項的背景圖片 51 gv_buttom_menu.setBackgroundResource(R.drawable.channelgallery_bg); 52 // 設置列數,為5列 53 gv_buttom_menu.setNumColumns(5); 54 // 設置位置 55 gv_buttom_menu.setGravity(Gravity.CENTER); 56 // 垂直間隔10 57 gv_buttom_menu.setVerticalSpacing(10); 58 // 水平間隔10 59 gv_buttom_menu.setHorizontalSpacing(10); 60 ArrayList data = new ArrayList(); 61 // 定義菜單選項的圖片和文字 62 // 增加菜單 63 HashMap map = new HashMap(); 64 map.put("itemImage", R.drawable.menu_new_user); 65 map.put("itemText", "增加"); 66 data.add(map); 67 // 查找菜單 68 map = new HashMap(); 69 map.put("itemImage", R.drawable.menu_search); 70 map.put("itemText", "查找"); 71 data.add(map); 72 // 刪除菜單 73 map = new HashMap(); 74 map.put("itemImage", R.drawable.menu_delete); 75 map.put("itemText", "刪除"); 76 data.add(map); 77 // 菜單選項 78 map = new HashMap(); 79 map.put("itemImage", R.drawable.controlbar_showtype_list); 80 map.put("itemText", "菜單"); 81 data.add(map); 82 // 退出菜單 83 map = new HashMap(); 84 map.put("itemImage", R.drawable.menu_exit); 85 map.put("itemText", "退出"); 86 data.add(map); 87 88 // 設置SimpleAdapter 89 // 1.Context 上下文 90 // 2.data 是菜單中顯示數據信息,包括圖片和說明文字 91 // 3.R.layout.item_ment 從data中取出數據map類型,用此布局文件來展示數據信息,包括圖片和說明文字 92 // 4,5 是將data和布局文件聯系起來 93 // 4 放入map中的key值 94 // 5 按照map中的key值,把相應的數據傳遞過來,最后展現出來 95 SimpleAdapter adapter = new SimpleAdapter(this, data, 96 R.layout.item_menu, new String[] { "itemImage", "itemText" }, 97 new int[] { R.id.item_image, R.id.item_text }); 98 99 // gv_buttom_menu只是負責展現,他是沒有數據的 100 // adapter是把展現方式和數據聯系在一起的一種工具,按照某種特定方式展現出來 101 gv_buttom_menu.setAdapter(adapter); 102 103 } 104 }