Android屏幕方向更改对所有活动的影响

31

我想在我的安卓应用中将屏幕方向固定为竖直方向。通过搜索谷歌,我发现可以通过在manifest.xml文件中添加以下代码来实现:

<activity android:name=".LauncherActivity"
  android:configChanges="keyboardHidden|orientation" 
  android:screenOrientation="portrait">
</activity>

这已经足够好了,但问题是:我现在有大约15个活动,并且这个数字将增长。有没有办法一次性为所有活动应用方向?

我尝试以以下方式使用样式:

theme.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
  <style name="Custom" parent="android:Theme">
    <item name="android:screenOrientation">portrait</item>
    <item name="android:windowBackground">@drawable/launcher</item>
    <item name="android:configChanges">keyboardHidden|orientation</item>
  </style>
</resources>

清单文件 Manifest.xml

<application ... 
android:debuggable="true"
  android:theme="@style/Custom"
>
//...
</application>
或者
<activity
... 
  android:theme="@style/Custom"
>
//...
</activity>

这两个示例都成功使用了windowBackground,但是screenOrientation无法正常工作。有什么想法吗?

2个回答

24

不行,我需要重复执行

<activity android:name=".LauncherActivity"
  android:configChanges="keyboardHidden|orientation" 
  android:screenOrientation="portrait">
</activity>

在清单文件中的每个 <activity> 标签中。


15

你可以创建一个继承 Activity 的类:

public class PortraitActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

我认为,如果你的活动扩展PortraitActivity而不是Activity,它就会生效。

编辑: SCREEN_ORIENTATION_PORTRAIT或SCREEN_ORIENTATION_LANDSCAPE


3
setRequestedOrientation() 对我没有帮助。在这种情况下,活动首先会短暂地横向定位,然后调用onCreate()并将活动返回到纵向。“横向时刻”对用户可见,特别是在较慢的设备上。 - PVoLan
这是一种有效的方法。对此点赞。 - Doc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接