Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 忽略景观维度_Android - Fatal编程技术网

Android 忽略景观维度

Android 忽略景观维度,android,Android,我有一个在清单上强制执行肖像的应用程序: <activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" android:label="@string/launcher_name"

我有一个在清单上强制执行肖像的应用程序:

<activity
            android:name=".MyActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            android:label="@string/launcher_name"
            android:launchMode="singleTop"
            android:windowSoftInputMode="adjustPan">

</activity>
现在,当方向为横向时,我希望某些元素改变它们的大小,所以我有以下两个dimens.xml

<resources>
    <dimen name="scoreboard_height_land">24dp</dimen>
    <dimen name="scoreboard_height_port">16dp</dimen>
</resources>
<resources>
    <dimen name="scoreboard_height">@dimen/scoreboard_height_land</dimen>
</resources>
<resources>
    <dimen name="scoreboard_height">@dimen/scoreboard_height_port</dimen>
</resources>
dimens-land.xml

<resources>
    <dimen name="scoreboard_height">24dp</dimen>
</resources>

24dp
dimens-port.xml

<resources>

    <dimen name="scoreboard_height">16dp</dimen>
</resources>

16dp
然而,一个和另一个之间的切换根本不起作用,只使用了横向切换。我想这和我的肖像画有关,但有办法解决这个问题吗


您可以从
MyActivity
的清单条目中删除
android:configChanges=“orientation”
。但是,由于这是不可取的,因此使用此属性声明配置将阻止活动重新启动,相反,活动将保持运行并调用其方法,您需要注意配置更改,并应用您希望的逻辑来替代
onConfigurationChanged()

下面是如何实现手动操作

将这些dimen值复制到一个全局可用的values/dimens.xml文件中

values/dimens.xml

<resources>
    <dimen name="scoreboard_height_land">24dp</dimen>
    <dimen name="scoreboard_height_port">16dp</dimen>
</resources>
<resources>
    <dimen name="scoreboard_height">@dimen/scoreboard_height_land</dimen>
</resources>
<resources>
    <dimen name="scoreboard_height">@dimen/scoreboard_height_port</dimen>
</resources>
注:
您很可能可以使用
Configuration.ORIENTATION\u-grait
Configuration.ORIENTATION\u-scape
triggerratrait
triggerratravel
方法调用
setHeightOfScoreboardViewBasedOnOrientation
方法。但是处理配置更改更有趣,尤其是当您的活动在后台堆栈中并且方向发生变化时

你试过把dimens-port.xml重命名为dimens.xml吗?我试过了,是的,但是land被忽略了。奇怪的是,它应该是级联的。你有没有试着把这两个名字都命名为dimen,但把风景复制放在一个-land包里?是的,对不起,我就是这样命名的,所以听起来都是正确的。也许您可以在IDE中添加项目面板的资源部分的屏幕截图。我之所以写这行是因为我需要它,所以我需要解决这个问题……然后您可能想要实现检测活动的
onConfigurationChanged()
中的更改并在那里应用新高度。我做到了,然而,我不知道如何告诉操作系统使用来自景观的dimens!因此,除了手动执行之外,绝对没有其他方法可以应用不同的样式?有,但您必须放弃configChanges=“orientation”的清单条目。