Android 如何防止设备旋转时布局发生任何变化?
我想我的问题看起来和很多老问题很相似,但却不一样 我希望应用程序在运行时旋转设备时不要更改布局方向。 这: …不起作用。我不想有固定方向的应用程序。我只想防止它在应用程序运行时发生更改 这: …不起作用。设置后,应用程序不会重新启动,布局不会更改为其他布局,但当前布局会根据新设备方向旋转和拉伸 我想要实现的就是在活动开始时根据方向选择合适的布局,之后保持相同的布局和布局方向,直到应用程序完成Android 如何防止设备旋转时布局发生任何变化?,android,layout,orientation,Android,Layout,Orientation,我想我的问题看起来和很多老问题很相似,但却不一样 我希望应用程序在运行时旋转设备时不要更改布局方向。 这: …不起作用。我不想有固定方向的应用程序。我只想防止它在应用程序运行时发生更改 这: …不起作用。设置后,应用程序不会重新启动,布局不会更改为其他布局,但当前布局会根据新设备方向旋转和拉伸 我想要实现的就是在活动开始时根据方向选择合适的布局,之后保持相同的布局和布局方向,直到应用程序完成 有人知道如何轻松地做到这一点吗?使用此代码将应用程序限制在同一方向,直到应用程序完成,调用createI
有人知道如何轻松地做到这一点吗?使用此代码将应用程序限制在同一方向,直到应用程序完成,调用createInstance后使用此代码,然后在相应的资源文件夹中使用适当的布局,用于纵向分辨率/布局和横向分辨率/布局
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
if(orientation == Configuration.ORIENTATION_PORTRAIT){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
if(orientation == Configuration.ORIENTATION_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
Android系统通过销毁和重新创建活动自动为您处理旋转。Andrdoid称之为“配置更改”,有几种情况可能发生(请参阅) 这不是您想要的,因此您可以在
AndroidManifest.xml
中指出要手动处理的配置更改类型:
<Activity ... android:configChanges="orientation" />
然后,您可能希望覆盖
活动。OnConfiguration Changed(Configuration)
以根据需要处理配置更改。解决方案是在onCreate()中找到屏幕方向,然后设置该方向:
/* First, get the Display from the WindowManager */
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
/* Now we can retrieve all display-related infos */
int width = display.getWidth();
int height = display.getHeight();
int orientation = display.getOrientation();
然后相应地设置方向:setRequestedOrientation(ActivityInfo.SCREEN\u orientation\uuxxxxx)试试:
package com.exercise.AndroidOrientation;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class AndroidOrientationActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);
buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}});
buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}});
}
}
/* First, get the Display from the WindowManager */
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
/* Now we can retrieve all display-related infos */
int width = display.getWidth();
int height = display.getHeight();
int orientation = display.getOrientation();
package com.exercise.AndroidOrientation;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class AndroidOrientationActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);
buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}});
buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}});
}
}