在我的Activity
中,如果有单击按钮,则会将屏幕旋转到横向模式,但是只有横向模式会停滞。如何启用人像模式?我正在使用以下代码进行强制旋转。
rotate.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
});
以上代码覆盖了原生旋转功能,请问有人可以建议我如何启用原生旋转功能?
答案 0 :(得分:1)
通过编程,您可以使用此代码
potraitButton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
buttonLandscape.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
});
如果要自动旋转屏幕:
SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
sensorManager.registerListener(new SensorEventListener() {
int orientation=-1;;
@Override
public void onSensorChanged(SensorEvent event) {
if (event.values[1]<6.5 && event.values[1]>-6.5) {
if (orientation!=1) {
Log.d("Sensor", "Landscape");
}
orientation=1;
} else {
if (orientation!=0) {
Log.d("Sensor", "Portrait");
}
orientation=0;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
答案 1 :(得分:0)
基本上,您有两个选择。
首先,您可以使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
另一种方法是覆盖onConfigurationChanged()
(看一下文档here)。
示例:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(changedOrientationManually &&
newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
//Logic (maybe setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);)
}
}
您可以通过两种方式实现目标,这取决于何时返回纵向。
答案 2 :(得分:0)
创建一个全局变量为
boolean landscape = false;
然后单击按钮;
rotate.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
if(!landscape){
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
landscape = true;
}else{
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
landscape = false;
}
}});
因此,如果再次单击该按钮,它将再次切换到纵向模式。
答案 3 :(得分:0)
以我的理解
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
会覆盖您在AndroidManifest中为该活动定义的方向,例如:
android:screenOrientation="sensor"
要恢复自动方向更改,您需要重置方向:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);