android.max_aspect meta 有什么不同?
Where does android.max_aspect meta make difference?
最近的一篇blog说明我们必须使用
<meta-data android:name="android.max_aspect" android:value="2.1" />
在 AndroidManifest.xml 的 <application>
元素中用于在超宽屏设备上的最佳显示,例如三星盖乐世 S8。
为了对此进行测试,我在 Android 7.1.1 上安装了我的应用程序(没有 max_aspect,没有 resizeableActivity 标志;targetSdkVersion=22
,compileSdkVersion=24
)。具有自定义 2960x1440 分辨率的模拟器。如博客 post.
中所示,所有活动(包括身临其境)都会无边距地填满屏幕。
我添加了显式
<meta-data android:name="android.max_aspect" android:value="1.5" />
这对模拟器也没有影响。
所以,问题是:这个元标志是只在真实设备上检查过的,还是我的模拟器有一些配置遗漏了?
更新: 我试图联系到引用博客 post 的作者 Neto Marin。我为他对全球 Android 开发社区的贡献感到自豪 tweet ,但无法从他那里得到答案。
只有当您的 android:resizeableActivity 不正确时,android.max_aspect 才会有所不同。
如果您的应用程序的目标 API 是 24 或更高 android:resizeableActivity 设置为 true。
Note: You do not need to set a maximum aspect ratio if an activity's android:resizeableActivity attribute is set to true. If your app targets API level 24 or higher, this attribute defaults to true. For more information, see Configuring your app for multi-window mode.
请参考documentation。
您必须根据需要设置模拟器的纵横比。
试试这些步骤:
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)并且您的应用将不会利用额外的屏幕 space.
如果 activity 的 android:resizeableActivity
属性设置为 true,则无需设置最大纵横比。如果您的应用面向 API 级别 24 或更高级别,则此属性默认为 true。
Letterboxing 出现在不同的设备上,例如 Samsung S8、LG G6, Pixel 2 XL 和其他一些设备。它似乎是 Android 8 的一部分,尤其是 8.1。
官方Android 8.1 compatibility definition包含以下段落:
[C-0-1] Device implementations with the Configuration.uiMode set as
UI_MODE_TYPE_NORMAL MUST have an aspect ratio value between 1.3333 (4:3) and
1.86 (roughly 16:9), unless the app can be deemed as ready to be stretched longer by
meeting one of the following conditions:
- The app has declared that it supports a larger screen aspect ratio through the
android.max_aspect metadata value.
- The app declares it is resizeable via the android:resizeableActivity attribute.
- The app is targeting API level 26 or higher and does not declare a
android:MaxAspectRatio that would restrict the allowed aspect ratio.
注意前两个属性是应用级别的,后一个属性属于Activity.
一些供应商允许最终用户对此进行进一步控制。 LG 在 "Display" 设置上有 "App Scaling" menu; Samsung lets you choose "full screen apps"。
最近的一篇blog说明我们必须使用
<meta-data android:name="android.max_aspect" android:value="2.1" />
在 AndroidManifest.xml 的 <application>
元素中用于在超宽屏设备上的最佳显示,例如三星盖乐世 S8。
为了对此进行测试,我在 Android 7.1.1 上安装了我的应用程序(没有 max_aspect,没有 resizeableActivity 标志;targetSdkVersion=22
,compileSdkVersion=24
)。具有自定义 2960x1440 分辨率的模拟器。如博客 post.
我添加了显式
<meta-data android:name="android.max_aspect" android:value="1.5" />
这对模拟器也没有影响。
所以,问题是:这个元标志是只在真实设备上检查过的,还是我的模拟器有一些配置遗漏了?
更新: 我试图联系到引用博客 post 的作者 Neto Marin。我为他对全球 Android 开发社区的贡献感到自豪 tweet
只有当您的 android:resizeableActivity 不正确时,android.max_aspect 才会有所不同。 如果您的应用程序的目标 API 是 24 或更高 android:resizeableActivity 设置为 true。
Note: You do not need to set a maximum aspect ratio if an activity's android:resizeableActivity attribute is set to true. If your app targets API level 24 or higher, this attribute defaults to true. For more information, see Configuring your app for multi-window mode.
请参考documentation。
您必须根据需要设置模拟器的纵横比。
试试这些步骤:
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)并且您的应用将不会利用额外的屏幕 space.
如果 activity 的 android:resizeableActivity
属性设置为 true,则无需设置最大纵横比。如果您的应用面向 API 级别 24 或更高级别,则此属性默认为 true。
Letterboxing 出现在不同的设备上,例如 Samsung S8、LG G6, Pixel 2 XL 和其他一些设备。它似乎是 Android 8 的一部分,尤其是 8.1。
官方Android 8.1 compatibility definition包含以下段落:
[C-0-1] Device implementations with the Configuration.uiMode set as UI_MODE_TYPE_NORMAL MUST have an aspect ratio value between 1.3333 (4:3) and 1.86 (roughly 16:9), unless the app can be deemed as ready to be stretched longer by meeting one of the following conditions:
- The app has declared that it supports a larger screen aspect ratio through the android.max_aspect metadata value.
- The app declares it is resizeable via the android:resizeableActivity attribute.
- The app is targeting API level 26 or higher and does not declare a android:MaxAspectRatio that would restrict the allowed aspect ratio.
注意前两个属性是应用级别的,后一个属性属于Activity.
一些供应商允许最终用户对此进行进一步控制。 LG 在 "Display" 设置上有 "App Scaling" menu; Samsung lets you choose "full screen apps"。