0

私はAndroid開発に不慣れです。向きの変更を使用して、2つのアクティビティを切り替えようとしています。私の考えは、3つのアクティビティを使用することです。1つはTabActivityで、もう1つは通常のアクティビティです。ここにいくつかの擬似コードがあります:

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}
}

アクティビティActivity1およびActivity2では、メインアクティビティを再開するために、onPause()関数がオーバーライドされます。

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

\/\/\/\/ 編集 \/\/\/\/

わかりました、私は別のアプローチを取っています。TabActivityが必要なので、タブでさまざまなアクティビティを開始できるようにしたいので(この場合、TabActivityを使用する必要があると思います)。

Manifest.xmlを編集し、TabActivityと2番目のアクティビティにandroid.configChanges="orientation"を追加しました。次に、onConfigurationChanged()関数をオーバーライドしました。このアプローチでは、横向き(これは「通常の」アクティビティ)から縦向き(TabActivity)に切り替えることができます。逆の方法は機能せず、理由はまだわかりません。まったく同じです。 onConfigurationChanged関数(コピー&ペースト)および重要な部分のみを変更しました。

タブで開始されたアクティビティのonConfigurationChangedをオーバーライドしても効果はありません。

4

2 に答える 2

2

コードを記述する必要はありません。Android はすでにこれを自動的に処理しています。2 つの異なるレイアウト リソース フォルダーを作成するだけです。

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

このフォルダーxyz.xmlに、同じ名前で内容が異なるリソース記述ファイルを入れます。1 つはポートレート用のアクティビティを使用し、もう 1 つはランドスケープ用です。

ドローアブル (ビットマップ) またはその他のリソース (テキスト)に同じ手法 ( -port&修飾子) を使用できることに注意してください。-land

注:これは Android 1.5 ではサポートされていません。/res/layoutこのバージョンをサポートする場合は、さらにフォルダーを追加する必要があります。

于 2010-11-12T18:03:43.423 に答える
0

横向きモードでタブを使用せずに、縦向きモードでタブを使用するときにTabActivityの利点を引き続き使用する場合は、次の(醜いがまだ機能している)回避策を使用できます。/ res / layout-landフォルダーを作成し、対応するレイアウトファイルを配置します(縦向きに使用するレイアウトフォルダー内のファイルと同じ名前にする必要があります)。ただし、このファイルには、TabActivityが機能するために必要なブロックが含まれている必要があります。次のスニペットのように、これらのブロックを追加して、可視性を「gone」に設定します。

<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>

もちろん、オリエンテーションに応じて、アクティビティクラスでコンテンツ管理を正しく処理するようにしてください。

于 2011-06-07T10:31:48.547 に答える