今天晚上我按照android開發網,做一個Tab Layout的執行個體,卻總是無法成功!
沒道理官方網站的教程都是錯的啊!!
結果經過我的不段的測試,總算成功了!也把心裡體會拿出來與大家分享!
原教程:http://developer.android.com/intl/zh-CN/resources/tutorials/views/hello-tabwidget.html
運行環境:
eclipse 3.4
android 1.6
如果按照上面所做,不會成功的!其中還缺少重要檔案和代碼,我將重要步驟貼出:
1.Start a new project named HelloTabWidget
. (不變)
2.分別建立三個java:ArtistsActivity
, AlbumsActivity
, and
SongsActivity
public class ArtistsActivity extends Activity {<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState); </p><p> TextView textview = new TextView(this);<br /> textview.setText("This is the Artists tab");<br /> setContentView(textview);<br /> }<br />}
我們只需將其中的"This is the Artists tab" 中的Artists替換成Albums,Songs
3.在res/drawable/(有的是drawable-mdpi),下面建立:三個圖片(png格式,且是透明的)分別為ic_tab_artists.png,ic_tab_albums.png,ic_tab_songs.png。如果沒有手邊沒有png格式圖片的話,可以到(android安裝目錄/platforms/android-1.6/data/res/drawable/)下面找,很多!
重要的一點,其實並不需要想教程所說建立ic_tab_artists.xml,完全沒有必要的!我自認為!
請讓我給你分析:建立Tab Layout時,選中的表徵圖背景會成白色。如果沒有選中的表徵圖,背景會成灰色。而我們找的icon表徵圖本身是淺灰色。
4.Open the res/layout/main.xml
file and insert the following:(不變)
5Now open HelloTabWidget.java
and make it extend TabActivity
:.package com.hello.tabview;<br />import android.app.TabActivity;<br />import android.content.Intent;<br />import android.content.res.Resources;<br />import android.os.Bundle;<br />import android.widget.TabHost;<br />public class HelloTabWidget extends TabActivity {<br />public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> Resources res = getResources(); // Resource object to get Drawables<br /> TabHost tabHost = getTabHost(); // The activity TabHost<br /> TabHost.TabSpec spec; // Reusable TabSpec for each tab<br /> Intent intent; // Reusable Intent for each tab<br /> // Create an Intent to launch an Activity for the tab (to be reused)<br /> intent = new Intent().setClass(this, ArtistsActivity.class);<br /> // Initialize a TabSpec for each tab and add it to the TabHost<br /> spec = tabHost.newTabSpec("A").setIndicator("文章",<br /> res.getDrawable(R.drawable.ic_tab_artists))<br /> .setContent(intent);<br /> //TabSpec android.widget.TabHost.TabSpec.setContent(Intent intent)<br /> //newTabSpec("mytag")就是為後面的setCurrentTabByTag("mytag")<br /> //setIndicator(label,icon);label就是上面顯示的文字<br /> tabHost.addTab(spec);<br /> // Do the same for the other tabs<br /> intent = new Intent().setClass(this, AlbumsActivity.class);<br /> spec = tabHost.newTabSpec("B").setIndicator("相片",<br /> res.getDrawable(R.drawable.ic_tab_albums))<br /> .setContent(intent);<br /> tabHost.addTab(spec);<br /> intent = new Intent().setClass(this, SongsActivity.class);<br /> spec = tabHost.newTabSpec("C").setIndicator("歌曲",<br /> res.getDrawable(R.drawable.ic_tab_songs))<br /> .setContent(intent);<br /> tabHost.addTab(spec);<br /> //tabHost.setCurrentTab(0);//預設tab是從0開始,設定當前的tab標籤<br /> tabHost.setCurrentTabByTag("B");<br />}<br />}
6.還有一個關鍵的地方:就是修改AndroidManifest.xml檔案,挨著<activity android:name=".HelloTabWidget
" .....>....</acitivity>後面添加代碼:
<activity android:name=".AlbumsActivity"<br /> android:label="@string/app_name"<br /> android:theme="@android:style/Theme.NoTitleBar"><br /> </activity><br /> <activity android:name=".ArtistsActivity"<br /> android:label="@string/app_name"<br /> android:theme="@android:style/Theme.NoTitleBar"><br /> </activity><br /> <activity android:name=".SongsActivity"<br /> android:label="@string/app_name"<br /> android:theme="@android:style/Theme.NoTitleBar"><br /> </activity>
7.然後運行項目,得到如片。(可能你們的有點區別)
呵呵,總算成功了。
不過我還發現一個問題,但是沒有解決。
問題:如果你按下首頁表徵圖
,然後再進入此應用,tab標籤仍留在推出的狀態
但是如果你按下後退鍵
,再進入,tab標籤還原成預設狀態。
現在沒找到答案,有哪位兄弟能夠給我解答!!