其實Android 中的底部菜單, 可以用分頁控件很好的實現。 我們先將自定義分頁控件做好, 就可以做到頂底兩個位置的菜單了。
TabHost只是作為一個容器來存放一些Activity, 所以需要自己另外創建幾個新的Activity, 然後由主TabHost加載。
tab_style.xml
是每個Tab的自定義樣式
- //分頁控件樣式
- <?xml version="1.0" encoding="UTF-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingLeft="5dip"
- android:paddingRight="5dip"
- android:paddingTop="5dip"
- android:background="@drawable/tab_bg"
- >
-
- <FrameLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="0.6"
- >
- <TextView
- android:id="@+id/tab_label"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:gravity="center"
- android:background="@drawable/tab_title_selector"
- android:textColor="#FFFFFF"
- android:text
- />
- </FrameLayout>
- </LinearLayout>
main_tab.xml 是主TabHost布局文件
- //TabHost布局
- <?xml version="1.0" encoding="UTF-8"?>
- <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/tabhost"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
-
- //必須包含下列三個View
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
-
- <FrameLayout
- android:gravity="center"
- android:id="@android:id/tabcontent"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1.0"
- />
-
- //TabWidget位置在FrameLayout之下則顯示在低部, 在之上則顯示在頂部
- <TabWidget
- android:id="@android:id/tabs"
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:layout_weight="0.0"
- />
-
- </LinearLayout>
-
- </TabHost>
tab_title_selector.xml
是Tab中TextView的按下背景
- //選擇器,指示Text按下後的背景
- <?xml version="1.0" encoding="UTF-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_focused="true"
- android:drawable="@drawable/tab_btn_bg_d"
- />
- <item
- android:state_selected="true"
- android:drawable="@drawable/tab_btn_bg_d"
- />
- <item
- android:state_pressed="true"
- android:drawable="@drawable/tab_btn_bg_d"
- />
- </selector>
Activity類
另外還需要幾個Activity類, 普通的Activity類即可, 在此不顯示。
- public class TabTest extends TabActivity
- {
- private TabWidget mTabWidget;
- private TabHost mTabHost;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_tabs);
-
- mTabHost = getTabHost();
-
- //將要顯示的Activity載入TabHost控件
- //要顯示的Activity由自己自由創建
- setTabIndicator("one", 1, new Intent(this, OneActivity.class));
- setTabIndicator("Two", 2, new Intent(this, TwoActivity.class));
- setTabIndicator("Three", 3, new Intent(this, OneActivity.class));
- setTabIndicator("Four", 4, new Intent(this, TwoActivity.class));
- }
-
- private void setTabIndicator(String title, int nId, Intent intent)
- {
- //使用指定Tab樣式
- View view = LayoutInflater.from(this.mTabHost.getContext())
- .inflate(R.layout.tab_style, null);
-
- TextView text = (TextView)view.findViewById(R.id.tab_label);
- String strId = String.valueOf(nId);
-
- text.setText(title);
-
- //創建一個新Tab
- TabHost.TabSpec localTabSpec = mTabHost.newTabSpec(strId)
- .setIndicator(view).setContent(intent);
- //加載新Tab
- mTabHost.addTab(localTabSpec);
- }
- }
Android 分頁控件制成底部菜單源碼下載地址:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /pub/Android源碼集錦/2011年/12月/Android 分頁控件制成底部菜單/