子活动继承的屏幕方向

5

我有一个基础活动(扩展了AppCompactActivity),所有的活动都继承它。我的问题是,如果我从清单文件中设置android:screenOrientation="portrait"到基本活动中,为什么没有将其设置为所有扩展此活动的活动。这是我的清单文件:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".LoginActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".BaseActivity"
        android:screenOrientation="portrait"/>
    <activity android:name=".OtpActivity"></activity>
</application>
2个回答

4
如果您想为所有子活动设置方向,则最好在基本活动上使用以下代码。
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

在清单文件中,它会针对准确实例化的活动进行定位,例如如果是针对 .BaseActivity,则只有实际的 .BaseActivity 启动时才会具有其 xml 配置。在代码继承层次结构之外,xml 中设置的值不适用,而是每个活动启动都需要在 manifest.xml 中拥有自己的标签。在 AndroidManifest.xml 中不适用继承。

请问为什么 Android 清单文件中不能应用继承?这是有原因的还是不可行呢?谢谢。 - srb1991
1
这是Android设计的方式,其中XML中的内容应用于特定的Activity。想象一下,如果它允许继承,那么如果两个活动都设置了方向,则需要解决方向。这会使事情变得更加复杂。因此,它不是为此而设计的。 - Elye

1

注意:android:screenOrientation="portrait"是每个屏幕或活动的属性,这些屏幕或活动在清单文件中注册,因此,如果您没有在清单中的每个活动中提及此属性,则会采用默认值,因此我们必须为每个活动提及此属性,即使活动由其他提及此属性的活动扩展,继承在AndroidManifest.xml中不适用。


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