【译】UNIT里的安卓主题
发表于2016-02-29
原文链接:http://blogs.unity3d.com/2015/07/16/android-themes-in-unity/
原文作者未做版权声明,视为共享知识产权进入公共领域,自动获得授权
如果要了解安卓主题和样式,可以查阅Google文档http://developer.android.com/guide/topics/ui/themes.html
如果你在设计一款游戏,用Unity满屏显示世界和UI, 为什么要在乎主题?
首先,你可能想要展示一个WebView,或者某种标准安卓接口的对话框,它会默认集成应用系统的主题
其次,当点击InputField或者调用TouchScreenKeyboard.Open()的时候,会弹出一个带输入框的键盘输入展示。主题也会应用在输入框上。
在写此文的时间点上,Google有三种主要的主题:
· l Material(安卓5.0 Lollipop以及以后的版本可用)
· l Holo(安卓4.0 IceCream Sandwich以及以后的版本)
· l Holo以前的主题
让我们先来看下这些主题:
一、Holo
二、Material
三、NoTitleBar
如果你想从Google上下载你的游戏或者应用,你必须使用最新的主题(目前是Material)。
但是还有一种使用主题的方法—appcompat库,它是Android Support Library package的一部分。Google发布这个库是为了让开发者可以在比较旧的设备上使用最新的主题,比如在pre-Lollipop的设备上使用Material。在常规的安卓应用上这是一个好办法,但是Unity的标准库并没有包含appcompat,因为一些原因(最重要的是因为apk大小)。如果需要的话你可以把appcompat加入到Unity中-或者通过插件或者在导出工程后的Android Studio中。
现在回到Unity,如果你看下默认的manifest,你会看到以下内容:
(译注:很奇怪,原文这里是空的)
默认情况下,我们会使用所有支持设备(安卓2.3 Gingerbread以及以后的版本)能用的主题。好消息是我们现在允许用户在自己的manifest覆盖这个设置(更多内容请查这里,简单的说就是把你的manifest放到Assets/Plugins/Android/AndroidManifest.xml,但是要注意的是这会导致Unity原生的Manifest被完全覆盖)。通过版本来设置主题:
· l Unity4.6 family – from Unity 4.6.4 Patch 4;
· l Unity5.0 family – from Unity 5.0.1 Patch 4;
· l Unity 5.1 –from the initial release
但是请不要着急覆盖manifest来修改主题!我们还有一件事情要告诉你,Unity安卓播放器运行的时候,会在初始化的地方检查你是否修改了默认主题(Theme.NoTitleBar.Fullscreen):
·如果你更改了,我们将尊重你的选择。
·如果你没有修改,那我们将检查设备的API,并且对Lollipop以及以后的设备使用Material主题,对Ice Cream Sandwich以及以后的主题使用Holo主题。
所以Unity的底线是- 如果你没有在mainifest里面覆盖默认的祖逖,我们将在设备上运行游戏的时候应用最新的主题。在覆盖manifest的时候请小心。如果你没有在Manifest里面指明主题,安卓将会采用Theme.DeviceDefault,这在不同的设备上将导致不同的结果,有一些结果可能会让你失望。你也许应该在你的manifest里面保留Unity的默认设置,这样我们可以在设备上选择最好的主题。