Android 位於底部的Tab

來源:互聯網
上載者:User

 

第一步:首先你得瞭解TabHost和TabWidget, 將TabHost分為兩個部分,一個是放內容的,還有一個就是放選項卡的,我們這裡選項卡用TabWidget。TabHost的id應該寫為

android:id="@android:id/tabhost",而不是以前的那個加號,這樣可以直接在Activity裡面通過getTabHost方法得到此TabHost對象。那如何才能將選項卡放在最底部呢,這其實很簡單,還記得 RelativeLayout中android:layout_alignBottom 這個不,也就是說將TabWidget和選項卡內容放到RelativeLayout布局裡,廢話不多說了,看代碼

     <?xml version="1.0" encoding="utf-8"?>  
  1. <TabHost android:layout_width="fill_parent"  
  2.     android:layout_height="fill_parent"  
  3.     android:id="@android:id/tabhost"  
  4.     xmlns:android="http://schemas.android.com/apk/res/android"  
  5.     >  
  6.     <RelativeLayout  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="fill_parent"  
  9.         android:orientation="vertical"  
  10.         android:padding="3dp"  
  11.     >  
  12.          <FrameLayout  
  13.              android:layout_width="fill_parent"  
  14.             android:layout_height="fill_parent"  
  15.             android:id="@android:id/tabcontent"  
  16.             android:layout_weight="1"   
  17.              >  
  18.          </FrameLayout>  
  19.           <TabWidget  
  20.             android:layout_width="fill_parent"  
  21.             android:layout_height="50dip"  
  22.             android:id="@android:id/tabs"  
  23.             android:layout_alignBottom = "@android:id/tabcontent"  
  24.             />  
  25.     </RelativeLayout>  
  26. </TabHost>  

以上xml代碼可以通用哈,FrameLayout裡用來放內容的,Tab的xml基本結構就這樣搭好了,

第二步:接下來就是往Activity裡面寫點東東了,這個Activity必須要繼承下TabActivity,要不然就算你setContentView了上面那個xml也沒法通過getTabHost()獲得布局中的tabHost。

然後通過getTabHost得到TabHost對象。我這裡打算建立四個選項卡,newTabSpec 這是為你的每一個選項卡上面打上一個Tag,也就是標記標記而已,特殊情況下你可以通過這個來尋找到你的選項卡。setIndicator就是在你的選項卡上設定一些內容,至於什麼內容,你懂的,要麼是文字,要麼是圖片,要麼就是文字加圖片,當然有時候覆雜的話還會寫上布局檔案。我這裡就放上一個圖片吧,然後這個圖片加上一些特效,懶得在xml寫什麼布局了,直接在代碼寫了,返回的是一個View對象,廢話有點多,直接看代碼吧

  private  class TabView extends LinearLayout {  
  1.     ImageView imageView ;  
  2. public TabView(Context c, int drawable, int drawableselec) {  
  3.     super(c);  
  4.     imageView = new ImageView(c);  
  5.     StateListDrawable listDrawable = new StateListDrawable();  
  6.     listDrawable.addState(SELECTED_STATE_SET, this.getResources()  
  7.             .getDrawable(drawableselec));  
  8.     listDrawable.addState(ENABLED_STATE_SET, this.getResources()  
  9.             .getDrawable(drawable));  
  10.     imageView.setImageDrawable(listDrawable);  
  11.     imageView.setBackgroundColor(Color.TRANSPARENT);  
  12.     setGravity(Gravity.CENTER);  
  13.     addView(imageView);  
  14. }  

上面的代碼也就是自訂的一個View吧。

下面這個就是構建選項卡以及內容(選中的是第二個選項卡),我這裡就把每個不同的選項卡內容分別放在不同的Activity裡面,然後通過Tab來將這些Activity合并在一起,這樣顯得比較有層次感。

        @Override  
  1.     public void onCreate(Bundle savedInstanceState) {  
  2.         super.onCreate(savedInstanceState);  
  3.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  4.         setContentView(R.layout.main_tab);  
  5.         TabHost tabHost=getTabHost();  
  6.           
  7.         TabView view = null;  
  8.           
  9.         // 最近連絡人   
  10.         view = new TabView(this, R.drawable.bg_tab_dial_normal, R.drawable.bg_tab_dial_normal);  
  11.         view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));  
  12.               
  13.         TabSpec recentContactSpec=tabHost.newTabSpec("RecentContact");  
  14.         recentContactSpec.setIndicator(view);  
  15.         Intent recentContactIntent = new Intent(this, RecentContactActivity.class);  
  16.         recentContactSpec.setContent(recentContactIntent);  
  17.         // 連絡人   
  18.         view = new TabView(this, R.drawable.bg_tab_contact_normal, R.drawable.bg_tab_contact_normal);  
  19.         view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));  
  20.           
  21.         TabSpec contactBookSpec=tabHost.newTabSpec("ContactBook");  
  22.         contactBookSpec.setIndicator(view);  
  23.         Intent contactBookIntent = new Intent(this,ContactBookActivity.class);  
  24.         contactBookSpec.setContent(contactBookIntent);  
  25.           
  26.         // 簡訊   
  27.         view = new TabView(this, R.drawable.bg_tab_sms_normal, R.drawable.bg_tab_sms_normal);  
  28.         view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));  
  29.           
  30.         TabSpec smsMessageSpec = tabHost.newTabSpec("SmsMessage");  
  31.         smsMessageSpec.setIndicator(view);  
  32.         Intent smsMessageIntent = new Intent(this, SmsMessageActivity.class);  
  33.         smsMessageSpec.setContent(smsMessageIntent);  
  34.           
  35.         //設定    
  36.         view = new TabView(this, R.drawable.bg_tab_setting_normal, R.drawable.bg_tab_setting_normal);  
  37.         view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));  
  38.           
  39.         TabSpec settingSpec = tabHost.newTabSpec("Setting");  
  40.         settingSpec.setIndicator(view);  
  41.         Intent settingIntent = new Intent(this, SettingActivity.class);  
  42.         settingSpec.setContent(settingIntent);  
  43.           
  44.         tabHost.addTab(recentContactSpec);  
  45.         tabHost.addTab(contactBookSpec);  
  46.         tabHost.addTab(smsMessageSpec);  
  47.         tabHost.addTab(settingSpec);  
  48.           
  49.         tabHost.setCurrentTab(1);  
  50.     }  
  51.       

這個我沒有寫Demo,也就不提供詳細的Demo了,不過還是截個圖吧

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.