运行某些 App 在手机或安卓平板时,手机上只能竖屏显示,平板是强制横屏。
在我们的平板上,发现当把 density 从 160 改为 240 时,这些 App 只能竖屏显示,也就是被当成手机了。
请教下,density 对应到手机或平板是一个什么机制,有没有办法让 App 强制识别设备为平板?
1
gam2046 2022-05-18 10:10:32 +08:00
平板强制横屏是怎么个强制法?
如果显示区域居中,两边留黑边竖屏显示应用内容,可以尝试(我在 Android9 测试通过)修改: https://cs.android.com/android/platform/superproject/+/android-9.0.0_r42:frameworks/base/core/res/res/values/config.xml;l=2546;drc=970bf5a6b3db9724b8c9b6d235b65495f7dcb411 值为 true 。 如果你的代码中默认方向并不是横屏方向,可以参考这里的代码修改 https://cs.android.com/android/platform/superproject/+/android-9.0.0_r42:frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java;l=7243;drc=11768fd80fe62e66df0651b3301315afeb234abb |
2
654656413245 2022-05-18 13:43:31 +08:00 via iPhone
app manifest 看看 orientation 的 aspectRatio 属性
|
3
zinwalin OP @654656413245 我们是安卓系统和平板提供商,要适配别人家的 App
|
5
zinwalin OP @654656413245 谢谢
|
6
zinwalin OP @gam2046 有个 App 运行在我们的平板上,一启动就显示为横屏画面。 但是把 density 从 160 改为 240 后, 变为了竖屏显示,也就是平板被当成手机运行。 所以我想知道改变 density 为什么会导致 App 判断出错。
|
7
gam2046 2022-05-18 18:00:12 +08:00
@zinwalin #6
> density 为什么会导致 App 判断出 不可控的行为,这是应用开发商自己的判断逻辑。早年间我看到过一些第三方写的文章,通过判断屏幕密度来猜测设备是否属于手机,因为一般手机的屏幕素质都会高出其他 Android 设备(平板、电视)一大截。 我这是做的 Android TV 机顶盒开发,也是为了一些仅支持的竖屏的应用能够在 ATV 上跑起来。虽然不知道这样做有什么意义,毕竟这类应用根本不支持遥控器操作,但是客户是这么要求的。 从你的表述看,你说的横屏应该和我想的不是同一个。你只是需要给重力感应的默认方向就行了(原则上这都不需要你修改,只要相关的传感器驱动是正常工作的,aosp 里已经有了相关判断),比我这个容易,也不涉及显示驱动那一块的修改。 |
9
SGRRYRS 2022-06-16 14:45:17 +08:00
你猜为什么 TV dpi 是约 213?"适用于密度介于 mdpi 和 hdpi 之间的屏幕(约 213dpi )的资源。这不属于“主要”密度组。它主要用于电视,而大多数应用都不需要它。对于大多数应用而言,提供 mdpi 和 hdpi 资源便已足够,系统将视情况对其进行缩放。如果您发现有必要提供 tvdpi 资源,应按一个系数来确定其大小,即 1.33*mdpi 。例如,如果某张图片在 mdpi 屏幕上的大小为 100px x 100px ,那么它在 tvdpi 屏幕上的大小应该为 133px x 133px 。"
|