Android 工具栏:标题和溢出菜单仅在 5.0 上对齐问题
Android Toolbar: title and overflow menus aligment issue on 5.0 only
我正在按照 Material 设计标准开发一个 Android 应用程序,为了保持兼容性,我实现了一个自定义工具栏,如下所示:http://www.android4devs.com/2014/12/how-to-make-material-design-app.html 使用我的工具栏代码正在
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:theme="@style/AppToolbar"
android:background="@color/primary"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:elevation="4dp" >
然后我覆盖 values/style 中的 AppCompat 样式并指定主要和次要颜色以调整 ActionBar 布局。
<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<item name="android:textColor">@color/primary_text</item>
<item name="android:textColorPrimary">@color/accent</item>
<item name="android:textColorSecondary">@color/accent</item>
<item name="android:actionMenuTextColor">@color/accent</item>
<item name="android:itemTextAppearance">@style/menuAppearance</item>
<item name="android:editTextColor">@color/primary_text</item>
<item name="android:textColorHint">@color/secondary_text</item>
<item name="android:colorControlHighlight">@color/accent</item>
<item name="android:colorAccent">@color/accent</item>
</style>
<style name="menuAppearance" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
<item name="android:textColor">@color/accent</item>
</style>
</resources>
工具栏v21/style资源:
<style name="AppToolbar" parent="android:Widget.Material.Toolbar">
<item name="android:background">@color/primary</item>
<item name="android:textColorPrimary">@color/accent</item>
</style>
我终于用setSupportActionBar(Toolbar toolbar)方法设置了Action Bar。 Activity 标题在清单中,而菜单项属性在各自的 xml 文件中编码。
我在 Samsung s3 mini(Android 版本:4.1.2)上试用了我的应用程序,它工作得很好。标题和菜单图标在工具栏的垂直中心完美对齐,溢出菜单布局正常。
然而,在安装 Lollipop (5.0) 的华硕 Zenfone2 ZE500CL 上移动时,我发现标题和溢出菜单文本布局被搞乱了:它们卡在工具栏和溢出菜单列表的顶部,而其他菜单项,如 HomeIndicator 和 always-shown 那些在工具栏中保持垂直居中。
我在 Internet 上花了一天时间试图解决这个问题,但所有问题都是关于混乱的布局,可以通过为工具栏指定适当的高度来解决这些问题。很多人建议在工具栏中添加一个 TextView 来修复标题,我试过了,但我的问题更深了,因为溢出菜单项仍然是顶部对齐的。
我无法直接添加屏幕截图,所以我从 Google 驱动器发布这张图片,希望它能让事情更清楚 https://drive.google.com/file/d/0BzSgLr3IafUYUGhOS3BlYjY4UjA/view?usp=sharing
预先感谢您的帮助!
我最终找到了解决问题的方法;我正在为面临同样问题的人分享它。
我意识到只有 Lollipop 之前的设备才需要工具栏,所以我为应用程序创建了两个不同的主题:一个在 style.xml 资源中没有 ActionBar,另一个在样式资源的 v21 版本中有 ActionBar。
进入 style.xml:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
...
</style>
进入v21/style.xml:
<style name="AppTheme" parent="Theme.AppCompat">
...
</style>
这样,每当 Lollipop 之前的设备启动应用程序时,它都会启动无 ActionBar 版本。
Activity 布局和 class 布局也需要更改:至于样式,我为 Lollipop 设备创建了 Activity 布局的 v21 版本,并仅在原始布局中包含了工具栏:进入 layout/activity_main.xml
<RelativeLayout ...>
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
...
最后,在 OnCreate 方法中插入这个条件:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
以便仅在 Lollipop 之前的设备上填充空的 ActionBar。我在我的两台设备上都尝试了该应用程序,它终于成功了。
请注意,对于 xml 资源的 v21 版本,我指的是原始文件的副本,保存在 "resource_type"-v21 文件夹中。
我正在按照 Material 设计标准开发一个 Android 应用程序,为了保持兼容性,我实现了一个自定义工具栏,如下所示:http://www.android4devs.com/2014/12/how-to-make-material-design-app.html 使用我的工具栏代码正在
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:theme="@style/AppToolbar"
android:background="@color/primary"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:elevation="4dp" >
然后我覆盖 values/style 中的 AppCompat 样式并指定主要和次要颜色以调整 ActionBar 布局。
<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<item name="android:textColor">@color/primary_text</item>
<item name="android:textColorPrimary">@color/accent</item>
<item name="android:textColorSecondary">@color/accent</item>
<item name="android:actionMenuTextColor">@color/accent</item>
<item name="android:itemTextAppearance">@style/menuAppearance</item>
<item name="android:editTextColor">@color/primary_text</item>
<item name="android:textColorHint">@color/secondary_text</item>
<item name="android:colorControlHighlight">@color/accent</item>
<item name="android:colorAccent">@color/accent</item>
</style>
<style name="menuAppearance" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
<item name="android:textColor">@color/accent</item>
</style>
</resources>
工具栏v21/style资源:
<style name="AppToolbar" parent="android:Widget.Material.Toolbar">
<item name="android:background">@color/primary</item>
<item name="android:textColorPrimary">@color/accent</item>
</style>
我终于用setSupportActionBar(Toolbar toolbar)方法设置了Action Bar。 Activity 标题在清单中,而菜单项属性在各自的 xml 文件中编码。
我在 Samsung s3 mini(Android 版本:4.1.2)上试用了我的应用程序,它工作得很好。标题和菜单图标在工具栏的垂直中心完美对齐,溢出菜单布局正常。 然而,在安装 Lollipop (5.0) 的华硕 Zenfone2 ZE500CL 上移动时,我发现标题和溢出菜单文本布局被搞乱了:它们卡在工具栏和溢出菜单列表的顶部,而其他菜单项,如 HomeIndicator 和 always-shown 那些在工具栏中保持垂直居中。
我在 Internet 上花了一天时间试图解决这个问题,但所有问题都是关于混乱的布局,可以通过为工具栏指定适当的高度来解决这些问题。很多人建议在工具栏中添加一个 TextView 来修复标题,我试过了,但我的问题更深了,因为溢出菜单项仍然是顶部对齐的。
我无法直接添加屏幕截图,所以我从 Google 驱动器发布这张图片,希望它能让事情更清楚 https://drive.google.com/file/d/0BzSgLr3IafUYUGhOS3BlYjY4UjA/view?usp=sharing 预先感谢您的帮助!
我最终找到了解决问题的方法;我正在为面临同样问题的人分享它。 我意识到只有 Lollipop 之前的设备才需要工具栏,所以我为应用程序创建了两个不同的主题:一个在 style.xml 资源中没有 ActionBar,另一个在样式资源的 v21 版本中有 ActionBar。 进入 style.xml:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
...
</style>
进入v21/style.xml:
<style name="AppTheme" parent="Theme.AppCompat">
...
</style>
这样,每当 Lollipop 之前的设备启动应用程序时,它都会启动无 ActionBar 版本。 Activity 布局和 class 布局也需要更改:至于样式,我为 Lollipop 设备创建了 Activity 布局的 v21 版本,并仅在原始布局中包含了工具栏:进入 layout/activity_main.xml
<RelativeLayout ...>
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
...
最后,在 OnCreate 方法中插入这个条件:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
以便仅在 Lollipop 之前的设备上填充空的 ActionBar。我在我的两台设备上都尝试了该应用程序,它终于成功了。 请注意,对于 xml 资源的 v21 版本,我指的是原始文件的副本,保存在 "resource_type"-v21 文件夹中。