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”的清单条目。