生活随笔
收集整理的這篇文章主要介紹了
【Android 界面效果22】Android的Tab与TabHost
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Tab與TabHost
這就是Tab,而盛放Tab的容器就是TabHost 如何實現?? 每一個Tab還對應了一個布局,這個就有點好玩了。一個Activity,對應了多個功能布局。 ①新建一個Tab項目,注意,不要生成main Activity
這里不要選 ②在包里面新建一個類MyTab,繼承于TabActivity 其實,TabActivity是Activity的子類 package zyf.tab.test; import android.app.TabActivity; public class MyTab extends TabActivity { } 復制代碼 ③從父類繼承OnCreate()入口方法 package zyf.tab.test; import android.app.TabActivity; import android.os.Bundle; public class MyTab extends TabActivity { ? ? @Override ? ? protected void onCreate(Bundle savedInstanceState) { ? ?? ???// TODO Auto-generated method stub ? ?? ???super.onCreate(savedInstanceState); ? ? } } 復制代碼 ④在Manifest.xml文件中注冊一下MyTab類(Activity) <activity android:name=".MyTab"> ? ? <intent-filter> ? ?? ???<action android:name="android.intent.action.MAIN"></action> ? ?? ???<category android:name="android.intent.category.LAUNCHER"></category> ? ? </intent-filter> </activity> 復制代碼 ⑤這時候,需要設計一下標簽頁對應的布局,一般采用FrameLayout作為根布局,每個標簽頁面對應一個子節點的Layout <?xml version="1.0" encoding="utf-8"?> <!--??這里是根節點布局??-- > <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" ? ? android:layout_width="fill_parent" android:layout_height="fill_parent"> <!--??第一個Tab 對應的布局??-- > ? ? <LinearLayout android:id="@+id/widget_layout_Blue" ? ?? ???android:layout_width="fill_parent" android:layout_height="fill_parent" ? ?? ???androidrientation="vertical" > ? ?? ???<EditText android:id="@+id/widget34" android:layout_width="fill_parent" ? ?? ?? ?? ?android:layout_height="wrap_content" android:text="EditText" ? ?? ?? ?? ?android:textSize="18sp"> ? ?? ???</EditText> ? ?? ???<Button android:id="@+id/widget30" android:layout_width="wrap_content" ? ?? ?? ?? ?android:layout_height="wrap_content" android:text="Button"> ? ?? ???</Button> ? ? </LinearLayout> <!--??第二個Tab 對應的布局??-- > ? ? <LinearLayout android:id="@+id/widget_layout_red" ? ?? ???android:layout_width="fill_parent" android:layout_height="fill_parent" ? ?? ???androidrientation="vertical"??> ? ?? ???<AnalogClock android:id="@+id/widget36" ? ?? ?? ?? ?android:layout_width="wrap_content" android:layout_height="wrap_content"> ? ?? ???</AnalogClock> ? ? </LinearLayout> <!--??第三個Tab 對應的布局??-- > ? ? <LinearLayout android:id="@+id/widget_layout_green" ? ?? ???android:layout_width="fill_parent" android:layout_height="fill_parent" ? ?? ???androidrientation="vertical"> ? ?? ???<RadioGroup android:id="@+id/widget43" ? ?? ?? ?? ?android:layout_width="166px" android:layout_height="98px" ? ?? ?? ?? ?androidrientation="vertical"> ? ?? ?? ?? ?<RadioButton android:id="@+id/widget44" ? ?? ?? ?? ?? ? android:layout_width="wrap_content" android:layout_height="wrap_content" ? ?? ?? ?? ?? ? android:text="RadioButton"> ? ?? ?? ?? ?</RadioButton> ? ?? ?? ?? ?<RadioButton android:id="@+id/widget45" ? ?? ?? ?? ?? ? android:layout_width="wrap_content" android:layout_height="wrap_content" ? ?? ?? ?? ?? ? android:text="RadioButton"> ? ?? ?? ?? ?</RadioButton> ? ?? ???</RadioGroup> ? ? </LinearLayout> </FrameLayout> 復制代碼 ⑥首先,應該聲明TabHost,然后用LayoutInflater過濾出布局來,給TabHost加上含有Tab頁面的FrameLayout private TabHost myTabhost; myTabhost=this.getTabHost();//從TabActivity上面獲取放置Tab的TabHost LayoutInflater.from(this).inflate(R.layout.main, myTabhost.getTabContentView(), true); //from(this)從這個TabActivity獲取LayoutInflater //R.layout.main 存放Tab布局 //通過TabHost獲得存放Tab標簽頁內容的FrameLayout //是否將inflate 拴系到根布局元素上 myTabhost.setBackgroundColor(Color.argb(150, 22, 70, 150)); //設置一下TabHost的顏色 復制代碼 ⑦接著,在TabHost創建一個標簽,然后設置一下標題/圖標/標簽頁布局 myTabhost ? ?? ?? ?? ?? ? .addTab(myTabhost.newTabSpec("TT")// 制造一個新的標簽TT ? ?? ?? ?? ?? ?? ?? ?? ?.setIndicator("KK", ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???getResources().getDrawable(R.drawable.ajjc)) ? ?? ?? ?? ?? ?? ?? ?? ?// 設置一下顯示的標題為KK,設置一下標簽圖標為ajjc ? ?? ?? ?? ?? ?? ?? ?? ?.setContent(R.id.widget_layout_red)); ? ?? ???//設置一下該標簽頁的布局內容為R.id.widget_layout_red,這是FrameLayout中的一個子Layout 復制代碼 ⑧標簽切換事件處理,setOnTabChangedListener myTabhost.setOnTabChangedListener(new OnTabChangeListener(){ ? ?? ?? ?? ?@Override ? ?? ?? ?? ?public void onTabChanged(String tabId) { ? ?? ?? ?? ?? ? // TODO Auto-generated method stub ? ?? ?? ?? ?}? ?? ?? ?? ? ? ?? ???}); 復制代碼 ⑨各個標簽頁的動態MENU 先把在XML中設計好的MENU放到一個int數組里 private static final int myMenuResources[] = { R.menu.phonebook_menu, ? ?? ?? ?? ?R.menu.addphone_menu, R.menu.chatting_menu, R.menu.userapp_menu }; 復制代碼 在setOnTabChangedListener()方法中根據標簽的切換情況來設置myMenuSettingTag @Override ? ? public void onTabChanged(String tagString) { ? ?? ???// TODO Auto-generated method stub ? ?? ???if (tagString.equals("One")) { ? ?? ?? ?? ?myMenuSettingTag = 1; ? ?? ???} ? ?? ???if (tagString.equals("Two")) { ? ?? ?? ?? ?myMenuSettingTag = 2; ? ?? ???} ? ?? ???if (tagString.equals("Three")) { ? ?? ?? ?? ?myMenuSettingTag = 3; ? ?? ???} ? ?? ???if (tagString.equals("Four")) { ? ?? ?? ?? ?myMenuSettingTag = 4; ? ?? ???} ? ?? ???if (myMenu != null) { ? ?? ?? ?? ?onCreateOptionsMenu(myMenu); ? ?? ???} ? ? } 復制代碼 然后onCreateOptionsMenu(Menu menu) 方法中通過MenuInflater過濾器動態加入MENU ? ?@Override ? ? public boolean onCreateOptionsMenu(Menu menu) { ? ?? ???// TODO Auto-generated method stub ? ?? ???// Hold on to this ? ?? ???myMenu = menu; ? ?? ???myMenu.clear();//清空MENU菜單 ? ?? ???// Inflate the currently selected menu XML resource. ? ?? ???MenuInflater inflater = getMenuInflater();? ?? ??? //從TabActivity這里獲取一個MENU過濾器 ? ?? ???switch (myMenuSettingTag) { ? ?? ???case 1: ? ?? ?? ?? ?inflater.inflate(myMenuResources[0], menu); ? ?? ?? ?? ?//動態加入數組中對應的XML MENU菜單 ? ?? ?? ?? ?break; ? ?? ???case 2: ? ?? ?? ?? ?inflater.inflate(myMenuResources[1], menu); ? ?? ?? ?? ?break; ? ?? ???case 3: ? ?? ?? ?? ?inflater.inflate(myMenuResources[2], menu); ? ?? ?? ?? ?break; ? ?? ???case 4: ? ?? ?? ?? ?inflater.inflate(myMenuResources[3], menu); ? ?? ?? ?? ?break; ? ?? ???default: ? ?? ?? ?? ?break; ? ?? ???} ? ?? ???return super.onCreateOptionsMenu(menu); ? ? } 復制代碼 ⑩運行效果
|
轉載于:https://www.cnblogs.com/dongdong230/p/4183076.html
總結
以上是生活随笔為你收集整理的【Android 界面效果22】Android的Tab与TabHost的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。