根据此处接受的答案,我将此代码添加到活动中,作为我希望成为更改活动分配布局的第一步:
@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 的元素。例如,从这里改变它:
<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”爵士乐)。
但是,虽然 mashing 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() 事件引发敬酒)。