在Android上,活动方向会自动更改。
在Android上,活动方向会自动更改。
我正在开发一款基于Android的移动应用程序,minSdkVersion=15
。我希望支持平板电脑的两种方向,而智能手机只支持纵向。一切都运行得很顺利,但我遇到了一个小bug,让我疯狂。当智能手机处于横向模式时,我尝试触发一个新的Activity,它会在横向模式下打开一段时间,然后自动旋转为纵向。
我的每个Activity都扩展了一个GeneralActivity类:
public class GeneralActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 如果是智能手机,锁定方向为纵向 if (!Helper.isTablet(this.getApplicationContext())){ this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } }
我使用以下函数来检测平板电脑:
public class Helper { public static boolean isTablet(Context context){ Configuration config = context.getResources().getConfiguration() return config.smallestScreenWidthDp >= 600; } }
我选择不在Manifest.xml中指定android:screenOrientation
,因为这样我能够支持平板电脑的所有界面方向。
我是否遗漏了什么?
编辑
我决定采用Jonathan的答案中提到的最佳实践,但我描述的问题仍然存在。这是我的Github存储库: https://github.com/giacmarangoni/Android-Orientation-Test
在Android上,Activity的方向会自动改变的问题可以通过以下方法解决:
在出现问题的每个Activity的清单文件中添加android:screenOrientation="locked"
,并在onCreate()方法中使用setRequestedOrientation()
方法来定义横向或纵向方向。
在GitHub项目中,只需在清单文件中添加locked
方向即可解决问题,示例如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.giacomomarangoni.orientationtest"> <application android:allowBackup="true" android:icon="/ic_launcher" android:label="/app_name" android:supportsRtl="true" android:theme="/AppTheme"> <activity android:name=".MainActivity" android:screenOrientation="locked"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".OtherActivity" android:screenOrientation="locked"> </activity> </application> </manifest>
希望对你有所帮助。
你真是个英雄。我通常不会只为了表扬而发表评论,但我想强调对于任何遇到这个问题的人来说,这是正确的解决方案。这应该是被接受的答案,特别是因为它允许任何方向锁定逻辑与标准的setRequestedOrientation方法一起使用。
这是最好的答案...你救了我!我在清单文件中添加了locked
,当我的MediaPlayer加载完成后,使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
来释放锁定。非常好用。
在Android上,当屏幕方向自动更改时,可以将以下内容整理出问题的原因和解决方法:
问题原因:屏幕方向自动更改时,Activity的布局可能会出现问题,导致用户体验不佳。
解决方法:通过使用资源和尺寸限定符来解决此问题。
1. 在res/values目录下创建一个名为bools.xml(文件名可以自定义)的文件,将以下代码添加到该文件中:
true
2. 在res/values-sw600dp和res/values-xlarge目录下创建相同的bools.xml文件,将以下代码添加到这两个文件中:
false
这里的res/values-sw600dp和res/values-xlarge是根据屏幕尺寸进行限定的资源目录。
3. 在Activity的onCreate方法中添加以下代码:
if(getResources().getBoolean(R.bool.portrait_only)){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }
这段代码会根据屏幕尺寸来设置Activity的方向。如果屏幕尺寸大于等于600dp或者是x-large的设备(如平板电脑),则会保持根据传感器和用户锁定的旋转进行自由变化。其他设备(如手机)则会被限制为只能竖屏显示。
通过以上步骤,可以解决Activity在屏幕方向自动更改时出现的问题。
源文链接:原回答