使用我的 Lollipop 主题(在 Lollipop 上)!
Using my Lollipop theme (on Lollipop)!
我使用新的 Lollipop 工具让我的应用程序看起来非常漂亮。我认为向后兼容性很重要,所以我将所有 Fragments、actionBar 导入切换到支持库。现在(可以理解)我不能使用我的棒棒糖主题。
有没有办法针对不同的主题使用不同的操作栏?我试图将支持 ActionBar 转换为新的,但似乎不允许这样做。
我的问题在于以下内容(来自 v21 文档)
All of your Activities must extend from ActionBarActivity, which
extends from FragmentActivity from the v4 support library, so you can
continue to use fragments. All of your themes (that want an Action
Bar/Toolbar) must inherit from Theme.AppCompat. There are variants
available, including Light and NoActionBar. When inflating anything to
be displayed on the action bar (such as a SpinnerAdapter for list
navigation in the toolbar), make sure you use the action bar’s themed
context, retrieved via getSupportActionBar().getThemedContext(). You
must use the static methods in MenuItemCompat for any action-related
calls on a MenuItem.
所以通过调用 getsupportActionBar 我无法使用我的 Holo 主题:
<resources>
<!-- Base application theme. -->
<style name="appTheme" parent="android:Theme.Holo.Light.DarkActionBar">
</style>
<style name="MyActionBar"
parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:background">@color/blue_semi_transparent</item>
</style>
</resources>
此外,由于某种原因,操作栏上的按钮丢失了,它进入了下拉菜单,并且应用程序图标不再出现在操作栏中。
我真的不是这方面的专家,只是开始在棒棒糖上开发,所以非常感谢您的建议。
AppCompat(即 ActionBarActivity
)使用 Material color palette 定义整个应用程序的默认颜色。在您的情况下,您需要使用 colorPrimary
作为操作栏颜色:
<style name="appTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/blue_semi_transparent</item>
</style>
请注意,您还应提供 colorPrimaryDark
(相同颜色的较暗版本)用于为状态栏着色。
根据部分过时的 Action Bar training,AppCompat 还为您的菜单项使用应用命名空间属性(因为 showAsAction
在 API 11 之前不存在):
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
app:showAsAction="ifRoom" />
...
</menu>
根据 Toolbar documentation(这是 Material 主题和 AppCompat 中的默认行为):
In modern Android UIs developers should lean more on a visually distinct color scheme for toolbars than on their application icon. The use of application icon plus title as a standard layout is discouraged on API 21 devices and newer.
因此,正如您所指出的,应用程序图标未出现在操作栏上是预期的行为。
我使用新的 Lollipop 工具让我的应用程序看起来非常漂亮。我认为向后兼容性很重要,所以我将所有 Fragments、actionBar 导入切换到支持库。现在(可以理解)我不能使用我的棒棒糖主题。
有没有办法针对不同的主题使用不同的操作栏?我试图将支持 ActionBar 转换为新的,但似乎不允许这样做。
我的问题在于以下内容(来自 v21 文档)
All of your Activities must extend from ActionBarActivity, which extends from FragmentActivity from the v4 support library, so you can continue to use fragments. All of your themes (that want an Action Bar/Toolbar) must inherit from Theme.AppCompat. There are variants available, including Light and NoActionBar. When inflating anything to be displayed on the action bar (such as a SpinnerAdapter for list navigation in the toolbar), make sure you use the action bar’s themed context, retrieved via getSupportActionBar().getThemedContext(). You must use the static methods in MenuItemCompat for any action-related calls on a MenuItem.
所以通过调用 getsupportActionBar 我无法使用我的 Holo 主题:
<resources>
<!-- Base application theme. -->
<style name="appTheme" parent="android:Theme.Holo.Light.DarkActionBar">
</style>
<style name="MyActionBar"
parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:background">@color/blue_semi_transparent</item>
</style>
</resources>
此外,由于某种原因,操作栏上的按钮丢失了,它进入了下拉菜单,并且应用程序图标不再出现在操作栏中。 我真的不是这方面的专家,只是开始在棒棒糖上开发,所以非常感谢您的建议。
AppCompat(即 ActionBarActivity
)使用 Material color palette 定义整个应用程序的默认颜色。在您的情况下,您需要使用 colorPrimary
作为操作栏颜色:
<style name="appTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/blue_semi_transparent</item>
</style>
请注意,您还应提供 colorPrimaryDark
(相同颜色的较暗版本)用于为状态栏着色。
根据部分过时的 Action Bar training,AppCompat 还为您的菜单项使用应用命名空间属性(因为 showAsAction
在 API 11 之前不存在):
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
app:showAsAction="ifRoom" />
...
</menu>
根据 Toolbar documentation(这是 Material 主题和 AppCompat 中的默认行为):
In modern Android UIs developers should lean more on a visually distinct color scheme for toolbars than on their application icon. The use of application icon plus title as a standard layout is discouraged on API 21 devices and newer.
因此,正如您所指出的,应用程序图标未出现在操作栏上是预期的行为。