我认为我的问题与许多旧问题看起来相似,但不一样。
我希望应用程序在应用程序运行时旋转设备时不要更改布局方向。 这样:
android:screenOrientation = "portrait"
......没有做到这一点。我不想要有固定方向的应用程序。我想在应用程序运行时防止它发生变化。
此:
android:configChanges="orientation"
......没有做到这一点。设置后,应用程序不会重新启动,布局不会更改为另一个,但会根据新的设备方向旋转和拉伸当前布局。
我想要实现的是在活动开始时根据方向选择合适的布局,然后在应用完成之前保持相同的布局和相同的布局方向。
有人知道如何轻松完成这项工作吗?
答案 0 :(得分:1)
使用此代码将应用程序限制在相同的方向,直到应用程序完成,在调用createInstance后使用此代码,然后在相应的资源文件夹中使用适当的布局,用于纵向res /布局和横向使用res / layout-land .. 。
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);
}
答案 1 :(得分:0)
Android系统会通过销毁和重新创建活动来自动处理轮换。 Andrdoid将此称为“配置更改”,可能会出现几种情况(请参阅http://developer.android.com/reference/android/R.attr.html#configChanges)。
这不是您想要的,因此您可以在AndroidManifest.xml
中指明要手动处理的配置更改类型:
<Activity ... android:configChanges="orientation" />
然后,您可能希望覆盖Activity.onConfigurationChanged(Configuration)
以根据需要处理配置更改。
答案 2 :(得分:0)
解决方法是找出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_ORIENTATION_XXXXX)
答案 3 :(得分:0)
试一试:
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);
}});
}
}