最近blog解释说我们必须使用
<meta-data android:name="android.max_aspect" android:value="2.1" />
在 AndroidManifest.xml 的<application>
元素中,以便在超宽屏设备上实现最佳效果,例如三星Galaxy S8。
为了测试这一点,我在Android 7.1.1上安装了我的应用程序(没有max_aspect,没有resizeableActivity标志; targetSdkVersion=22
,compileSdkVersion=24
)。仿真器具有自定义2960x1440分辨率。所有活动,包括身临其境的活动,都会填满屏幕,没有任何边距,如博客文章所示。
我添加了明确的
<meta-data android:name="android.max_aspect" android:value="1.5" />
这对模拟器也没有影响。
所以,问题是:这个元标志只在真实设备上检查过,还是我的模拟器错过了一些配置?
更新:我试图联系引用博客文章的作者 Neto Marin 。我发现了一个自豪tweet 关于他对全球Android Dev社区的贡献,但无法得到他的回答。
答案 0 :(得分:7)
如果android:resizeableActivity不正确,android.max_aspect只会有所不同。 如果你的应用程序的目标API是24或更高,android:resizeableActivity设置为true。
注意:如果活动的android:resizeableActivity属性设置为true,则无需设置最大宽高比。如果您的应用以API级别24或更高为目标,则此属性默认为true。有关更多信息,请参阅为多窗口模式配置应用程序。
请参阅documentation。
答案 1 :(得分:2)
您必须根据需要设置模拟器的宽高比。
尝试以下步骤:
In Android Studio, open AVD Manager
Create Virtual Device
New Hardware Profile
Set name: "18:9 aspect ratio screen"
Set resolution: 1080 x 2160
Finish
Select "18:9 aspect ratio screen"
Next
Select system image Nougat (API Level 25)
Next
AVD Name: "API Level 25 Nougat 18x9 aspect ratio screen"
Finish
然后在此模拟器上运行。
如果您没有设置值,并且android:resizeableActivity
不成立,则最大宽高比默认为1.86(大约16:9),您的应用将无法利用额外的屏幕空间
如果活动的android:resizeableActivity
属性设置为true,则无需设置最大宽高比。如果您的应用以API级别24或更高为目标,则此属性默认为true。
答案 2 :(得分:2)
Letterboxing发生在不同的设备上,例如Samsung S8,LG G6,Pixel 2 XL以及其他一些设备。它似乎是Android 8的一部分,特别是8.1。
官方Android 8.1 compatibility definition包括以下段落:
[C-0-1]将Configuration.uiMode设置为的设备实现 UI_MODE_TYPE_NORMAL的宽高比值必须介于1.3333(4:3)和之间 1.86(大约16:9),除非该应用程序可以被视为已准备好延长 满足以下条件之一:
- 该应用已声明它通过支持更大的屏幕宽高比 android.max_aspect元数据值。
- 该应用声明可通过android:resizeableActivity属性调整大小。
- 该应用针对API级别26或更高级别,并且未声明a android:MaxAspectRatio会限制允许的宽高比。
请注意,前两个属性是应用程序级别,而后一个属性属于Activity。
一些供应商允许最终用户进一步控制。 LG有"App Scaling" menu;三星lets you choose&#34;全屏应用&#34; on&#34;显示&#34;设置。