ここで受け入れられた回答に基づいて、アクティビティに割り当てられたレイアウトを変更する最初のステップとして、このコードをアクティビティに追加しました。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
setContentView(R.layout.activity_settings_landscape);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
setContentView(R.layout.activity_settings);
}
}
...そして、AndroidManifest.xml のアクティビティの要素を変更しました。たとえば、次のように変更します。
<activity
android:name="hhs.app.SettingsActivity"
android:label="@string/title_activity_settings" >
</activity>
...次のようになります。
<activity
android:name="hhs.app.SettingsActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/title_activity_settings" >
</activity>
(「configChanges」ジャズを追加しました)。
ただし、keypad.9 をマッシングするとエミュレーターの向きが反転しますが、トーストは発生しません (onConfigurationChanged() の「if」行のブレークポイントはヒットしません)。私は何を間違っているか、または省略していますか?
注: AndroidManifest の「configChanges」行から「|keyboardHidden」を削除しても違いはありませんでした (これは単なる直感でした。「キーボードによる向きの変更に注意を払わない」ことを意味するのではないかと思いました)。
アップデート
araut の提案と Jared Burrows の提案を試してみましたが、どちらもうまくいきません。
これは単にエミュレーターの問題ですか?私はまだそれをテストするデバイスを持っていないので、経験的にその質問に自分で答えることはできません.
更新 2
ここで読んだ内容に基づいて、OrientationEventListener ジャズを追加することでこのジレンマを解決できるのではないかと考えましたが、そうではありません。
これは私が追加したコードです (コンテキストで示されています。新しいのは OrientationEventListener のものです)。
public class SettingsActivity extends ActionBarActivity {
private OrientationEventListener mOrientationListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
. . .
mOrientationListener = new OrientationEventListener(getApplicationContext()) {
@Override
public void onOrientationChanged(int orientation) {
Toast tostadaOrient = Toast.makeText(SettingsActivity.this,
orientation, Toast.LENGTH_SHORT);
tostadaOrient.setGravity(Gravity.CENTER, 0, 0);
tostadaOrient.show();
}
};
mOrientationListener.enable();
}
...しかし、まだ反応がありません (ここまたは onConfigurationChanged() イベントからトーストは発生しません)。