使用values.xml设置Android Activity屏幕方向

out*_*ing 5 java xml android

我正在尝试使用res/values中的XML文件中的值设置活动屏幕方向.我想这样做是因为,或多或少,我需要平板电脑(风景)和智能手机(肖像)相同的活动.

第一次尝试

表现:

<activity android:name="..." android:screenOrientation="@string/defaultOrientation"/>
Run Code Online (Sandbox Code Playgroud)

config.xml文件:

<string name="defaultOrientation">portrait</string>
Run Code Online (Sandbox Code Playgroud)

但是使用此设置应用程序将不会出现在设备上,它将返回此错误:

java.lang.NumberFormatException:无效的int:"portrait"

第二

好的,所以我只是把它改成了这个

表现:

<activity android:name="..." android:screenOrientation="@integer/defaultOrientation"/>
Run Code Online (Sandbox Code Playgroud)

config.xml文件:

<integer name="defaultOrientation">1</integer>
Run Code Online (Sandbox Code Playgroud)

我使用了1,因为ActivityInfo.SCREEN_ORIENTATION_PORTRAIT == 1.

但这也不起作用.似乎我可以修改一些值,如应用程序/活动名称,但不是屏幕方向?

我知道我可以通过代码解决它,但由于某种原因,它认为这也应该可以通过XML值文件获得.

以某种方式可以通过XML值实现它?

Dev*_*rim 4

对我来说,你的第二个解释也有同样的问题,我使用了你不需要的代码解决方法。

我在 res 文件夹下添加了 4 个 value 文件夹。“值”、“值-v11”、“值-v14”和“值-sw720dp”

所有值文件夹都有“integers.xml”。

“values”和“values-v14”的值为 1,即纵向;
<integer name="portrait_if_not_tablet">1</integer>

“values-v11”和“values-sw720dp”的值为2,即用户导向;
<integer name="portrait_if_not_tablet">2</integer>

在清单文件中,活动具有如下属性:
android:screenOrientation="@integer/portrait_if_not_tablet"

所有“values”、“values-v11”、“values-v14”均按预期工作,但“values-sw720dp”!

在调试时,我意识到在 sw720dp 设备(使用 API 16)上使用 getResources().getInteger(R.integer.portrait_if_not_tablet) 时,portrait_if_not_tablet 的值符合预期,但是当我通过 getRequestedOrientation() 检查当前方向的值时,我得到了不同的结果价值。

int requestedOrientation = getResources().getInteger(R.integer.portrait_if_not_tablet);
int currentOrientation = getRequestedOrientation();
if (currentOrientation != requestedOrientation) {
    setRequestedOrientation(requestedOrientation);
}
Run Code Online (Sandbox Code Playgroud)

所以我在活动的 onCreate 方法上使用了一个代码块来解决这个问题。