2010-11-12 102 views
0

我是Android開發新手。我正嘗試使用方向更改來切換兩個活動。我的想法是使用三個活動一個TabActivity和一個正常的活動。下面是一些僞代碼:Android:如何使用屏幕方向更改來切換活動

public class Main extends Activity{ 
// this is the entry point into my app 
    @Override 
    public void onCreate(...){ 
     if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){ 
      // Start Activity1 
    } else { //Start Activity2} 
} 

活動活動1和活性2將與意圖再次啓動的主要活動覆蓋了它們的onPause()函數。

onPause(){ 
    Intent intent = new Intent(this.ActivityX, Main.class); 
    startActivity(intent); 
} 

\/\/\/\/EDIT \/\/\/\/

好吧,我採取了不同的方法。因爲我需要一個TabActivity,因爲我想能夠在我的選項卡中啓動不同的活動(我認爲我必須在這種情況下使用TabActivity)。

我編輯了Manifest.xml併爲TabActivity和第二個Activity添加了android.configChanges =「orientation」。然後我重寫了onConfigurationChanged()函數。使用這種方法,我可以從橫向(這是「正常」活動)切換到縱向(TabActivity)。 另一種方式不起作用,我不知道爲什麼。同樣onConfigurationChanged功能(複製粘貼&),只有改變的關鍵部位

重寫活動的onConfigurationChanged在標籤中開始了沒有效果,也

+2

爲什麼要在定位更改時切換整個活動而不是僅切換佈局? – 2010-11-12 17:26:37

+0

在風景中,我想顯示一個圖形,在那裏你可以選擇圖片。我想在縱向視圖中的選項卡中顯示相應的數據。選項卡式視圖需要TabActivity。 – Darokthar 2010-11-12 17:36:51

+0

@mbaird:請注意,當方向更改時,當前活動將被終止並創建一個新活動。登錄'onDestroy'和'onCreate'看看發生了什麼。 – 2010-11-12 17:50:18

回答

2

您不必編寫任何代碼。 - 安卓已創建handles this automatically。只需創建兩個不同的佈局資源文件夾:

/res/layout-land // layout resources for landscape 
/res/layout-port // portrait layout 

在這個文件夾中放入xyz.xml具有相同名稱和不同內容的資源描述文件。一種使用肖像活動,另一種使用景觀活動。

請注意,您可以對繪圖(位圖)或任何其他資源(文本)使用相同的技術(-port & -land限定符)。

注意:這在Android 1.5上不受支持。如果您想支持此版本,則必須另外添加/res/layout文件夾。

+0

我知道這一點。但我不知道如何從一個佈局文件開始一個活動。正常的方法是使用setContentView()在運行時加載佈局。但是,當一個活動被選中時,TabActivity甚至不能工作,因爲TabActivity沒有setContentView()函數。我想我的問題是TabActivity。也許可以在Manifest.xml文件中創建兩個入口點,一個用於縱向,一個用於橫向? – Darokthar 2010-11-12 18:21:49

+1

上面看@CommonsWare評論:你不需要TabActivity來創建標籤。 – 2010-11-12 18:30:32

0

如果仍然希望在縱向模式下使用選項卡時使用TabActivity的優點,而在橫向模式下不使用選項卡,則可以使用以下(醜陋但仍在工作)的解決方法。創建/ res/layout-land文件夾,並在那裏放置一個相應的佈局文件(它應該與佈局文件夾中的文件名稱相同,用於縱向)。但是,該文件應包含TabActivity工作所需的塊。這是好的,下面的代碼片段添加這些塊,並設置自己的知名度,以「水漲船高」,如:

<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"> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp"> 
    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:visibility="gone" /> 
    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="5dp" 
     android:visibility="gone" /> 
    <!-- Feel free to add your REAL layout for the landscape --> 
</LinearLayout> 
</TabHost> 

當然,一定要正確處理好內容管理您的活動類,根據不同的方位。

相關問題