縦画面切り替えandroid:configChangesの使用
2104 ワード
package com.liupan.configchanges;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e(" onCreate", "onCreate");
text = (TextView) findViewById(R.id.text);
text.setText(" ");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
Log.e(" onConfigurationChanged", "onConfigurationChanged");
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
text.setText(" ");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
text.setText(" ");
}
}
}
デフォルトで設定しないと、携帯電話の縦横切り替えで現在のActivityが再構築され、onPause->onStop->onDestory->onCreate->onStart->onResume.
そうしたくない場合は、2つの方法があります.
1. 直接スクリーンを横または縦に設定
android:screenOrientation="landscape" android:screenOrientation="portrait"
この場合も手動で切り替えることができます
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int oritentation = getRequestedOrientation();
if (oritentation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (oritentation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
});
2.android:configChanges="orientation|keyboardHidden"を設定することで
しかし、注意しなければならないのはAndroid 3.2 API 13および以上のシステムでは、Activityが再作成する前に、もう1つの属性screenSizeを追加する必要がある.