我正在尝试使用res / values中的XML文件中的值设置活动屏幕方向。我想这样做是因为,或多或少,我需要平板电脑(风景)和智能手机(肖像)的相同活动。
清单:
<activity android:name="..." android:screenOrientation="@string/defaultOrientation"/>
config.xml中:
<string name="defaultOrientation">portrait</string>
但是使用此设置应用程序将不会出现在设备上,它将返回此错误:
java.lang.NumberFormatException:无效的int:“portrait”
好的,所以我只是将其改为
清单:
<activity android:name="..." android:screenOrientation="@integer/defaultOrientation"/>
config.xml中:
<integer name="defaultOrientation">1</integer>
我使用了1,因为ActivityInfo.SCREEN_ORIENTATION_PORTRAIT == 1.
但这也不起作用。似乎我可以修改一些值,如应用程序/活动名称,但不能修改屏幕方向?
我知道我可以通过代码解决它,但由于某种原因,它认为这也应该可以通过XML值文件获得。
以某种方式可以通过XML值实现它吗?
答案 0 :(得分:4)
对于我的第二个exlanation我也有同样的问题,我使用了你不想要的代码解决方法。
我在res文件夹下添加了4个值文件夹。 “values”,“values-v11”,“values-v14”和“values-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>
。
在Manifest文件中,activity有一个属性,如:
android:screenOrientation="@integer/portrait_if_not_tablet"
。
所有“值”,“值-v11”,“值-v14”按预期工作,但“values-sw720dp”!
调试时我意识到portrait_if_not_tablet的值在sw720dp设备(带有API 16)上与getResources()。getInteger(R.integer.portrait_if_not_tablet)一样正常,但当我通过getRequestedOrientation()检查当前方向的值时我得到了不同的价值。
int requestedOrientation = getResources().getInteger(R.integer.portrait_if_not_tablet);
int currentOrientation = getRequestedOrientation();
if (currentOrientation != requestedOrientation) {
setRequestedOrientation(requestedOrientation);
}
所以我在我的活动的onCreate方法上使用了一个代码块来解决这个问题。