2012-03-22 9 views
0

実際には、画面の向きが変わったときに別のアクティビティを表示する単純なアプリケーションを作成しました。私はドキュメントとスタックオーバーフローで与えられた例を行って、これを使用して、私は自分のアプリとその作業を正常に生成しています。しかし、私の唯一の疑いは、メインアクティビティのアクティビティタグ内のマニフェストファイル内にある場合、私がandroid:screenOrientation="portrait"を使用してアプリを実行すると、画面の向きが変わったときに次のアクティビティは開かれませんが、マニフェストからそれはうまく動作します。画面の向きが変更されたときにアクティビティが表示される問題

私の主なアクティビティを常にポートレートモードで開くようにしたいのですが、私はメインアクティビティのマニフェストでこのコードを使用する必要があります。アクティビティは開いていません。

誰も私がこれを解決するのを助けることができます。私が使用しているコードは:主な活動で

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk android:minSdkVersion="8" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".MainActivity" 
     android:configChanges="orientation" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ChartEngineActivity" 
     android:configChanges="keyboardHidden|orientation" > 
    </activity> 
</application> 

コード

public class MainActivity extends Activity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.main); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) 
    { 
     super.onConfigurationChanged(newConfig); 
     Intent intentNotes = new Intent(this, ChartEngineActivity.class); 
     this.startActivity(intentNotes); 
     finish(); 
    } 
} 
マニフェストファイル内

コードこのようなMainActivityのコードによって210

+1

これを削除android:screenOrientation = "portrait" 'bezあなたのアクティビティは常にポートレートモードで開きますので、' onConfigurationChanged'が呼び出されません。 –

+0

私はあなたの質問を理解していないと思います..アンドロイドを削除すると動作することがわかります:screenOrientation = "肖像画"しかし、状況を考えてみましょう。ユーザーが私のアプリを横長モードで撮って開くと、私の主なアクティビティは風景モードでも開きます。私の主な活動を常にポートレートモードで開くために私はこれを使用しました。だから私の質問は、このコードを置き換えないで私の仕事をすることが可能です。 – AndroidDev

+0

Anshuman、画面設定マニフェストファイルの静的でないMainActivityの 'onCreate'のオリエンテーション –

答えて

0

変更screenOrientation:この

android:screenOrientation="portrait" 

使用

android:screenOrientation="sensorPortrait" 

Portrait orientation, but can be either normal or reverse portrait based on the device sensor. Added in API level 9. 

の代わりに

public class MainActivity extends Activity { 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      int getConf=this.getResources().getConfiguration().orientation; 

      if(getConf==Configuration.ORIENTATION_PORTRAIT) 
      { 
       // this.setRequestedOrientation(
       // ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

       Toast.makeText(getBaseContext(), "ORIENTATION_PORTRAIT", Toast.LENGTH_SHORT).show(); 
      } 
      else 
      { 

       Toast.makeText(getBaseContext(), "ORIENTATION_LANDSCAPE", Toast.LENGTH_SHORT).show(); 
       this.setRequestedOrientation(
         ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
      } 

       setContentView(R.layout.main); 
     } 
    } 


@Override 
    public void onConfigurationChanged(Configuration newConfig) 
    { 
     super.onConfigurationChanged(newConfig); 
     Intent intentNotes = new Intent(this, ChartEngineActivity.class); 
     this.startActivity(intentNotes); 
     finish(); 
    } 
+0

どうすればこの問題を解決できますか? – AndroidDev

+0

@imrankhanthisは私の考えでは動作しません...このリンクを参照してください。http://stackoverflow.com/questions/6457659/android-onconfigurationchanged-not-being-called – 5hssba

+0

@raju yep ur right ..これはうまくいきません私の問題を解決する。 – AndroidDev

0

は... この意志これはビットを助けることができるかもしれ電話

onConfigurationChanged(Configuration newConfig) also.. 
+0

ありがとうございます...しかし、私のアプリは、APIレベル8を使用してビルドされています。 – AndroidDev

0

最初いけない...あなたのマニフェストの配向については何も変更しても配向を固定いけない... が、その後のOnCreate にこの

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    int k=getResources().getConfiguration().orientation; 
       if(k==Configuration.ORIENTATION_LANDSCAPE){ 
        Intent intentNotes = new Intent(this, ChartEngineActivity.class); 
    this.startActivity(intentNotes); 
    finish(); 
    } 
    @Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    if(k==Configuration.ORIENTATION_LANDSCAPE){ 
        Intent intentNotes = new Intent(this, ChartEngineActivity.class); 
    this.startActivity(intentNotes); 
    finish(); 
    } 
} 

    } 
+0

これはうまくいきます.. – 5hssba

+0

私はこのコードをonCreate()またはonConfigurationChanged()の中に書くべきです。私のマニフェストファイルでは、私はandroid:screenOrientaion = "portrait"を保つべきです。ここではインフラは何ですか?可能であれば、私のコード – AndroidDev

+0

をマニフェストのままにしておくことができます。screenOrientaion = "portrait"を保持し、あなたのアクティビティを作成してこのコードを追加してください...これがうまくいけば...それは今私のために働いていました。 .. – 5hssba

0

レッツのように、あなたは合計3つの活動を持っており、彼らは主あると仮定しますアクティビティ1とアクティビティ2。

そして、あなたが最初にマニフェストにすべての3つの活動を宣言したが設定画面の向きの属性を設定しないでください。

メインアクティビティがアクティビティ1を開始しているとします。

アクティビティ1に移動します。 Activity1はポートレートモードであり、例えばlistviewを表示しています。 だからonCreate() Activity1の方法は、アクティビティの方向をチェックします。もし、向きがLandscapeモードであれば、Activity2を開始してActivity1を終了し、Activity1のリストビューを表示します。また、onConfigurationChangedメソッドにもう1つ追加すると、新しい構成を確認し、横向きモードの場合はActivity2を開始し、Activity1を終了します。

アクティビティ2に移動します。 Activity2は風景モードで、例えばGridviewを表示しています。 したがって、onCreate() Activity2の方法で向きを確認します。向きがポートレートの場合、Activity1を開始してActivity2を終了し、Activity2でGridviewを表示します。さらにonConfigurationChangedメソッドにもう1つ追加すると、新しい設定が確認され、アクティビティ2を終了します。

の設定確認方法

int getConf=this.getResources().getConfiguration().orientation; 
if(getConf==Configuration.ORIENTATION_PORTRAIT) { 
    //Portrait 
}else { 
    //Landscape 
} 

Activity1はあるべきような

int getConf=this.getResources().getConfiguration().orientation; 
if(getConf==Configuration.ORIENTATION_LANDSCAPE) { 
    startActivity(new Intent(this, Activity2.class)) 
    finish(); 
} 

Activity2意志ルックスのように、以下の

int getConf=this.getResources().getConfiguration().orientation; 
if(getConf==Configuration.ORIENTATION_PORTRAIT) { 
    startActivity(new Intent(this, Activity1.class)) 
    finish(); 
} 
以下

同じようにonConfigurationChangedメソッドをオーバーライドし、上記のチェックをして、新しいアクティビティを開始して現在のアクションを完了したような適切なアクションをとるようにオリエンテーションをチェックする必要があります。

+0

Ok ...今私の質問ですユーザーが携帯電話を横長モードにしてアプリを起動してから、そのアクティビティが開かれていることを確認します。私はそのアクティビティを思い浮かべます2.しかし、あなたがアプリの開始はいつもアクティビティ1を開いています。 – AndroidDev

+0

私が書いた小さなミスがありましたが、今は完璧です。私の回答アクティビティ1によれば、あなたはアプリケーションを横長モードで実行し、アプリケーションを起動しようとするとActivity1が呼び出されますが、起こったのはonCreateメソッドの設定をチェックするだけで、横向きにしてActivity2を開始すると終了します。 – Dharmendra

+0

ok..iは確認して、わかります.... – AndroidDev

関連する問題