我正在按照Material Design标准开发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" >
然后我在值/样式中覆盖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 name="AppToolbar" parent="android:Widget.Material.Toolbar">
<item name="android:background">@color/primary</item>
<item name="android:textColorPrimary">@color/accent</item>
</style>
我终于使用setSupportActionBar(工具栏工具栏)方法来设置Action Bar。活动标题位于清单中,而菜单项属性则在相应的xml文件中编码。
我在三星s3 mini(Android版本:4.1.2)上尝试了我的应用程序,它运行得很好。标题和菜单图标在工具栏的垂直中心完美对齐,溢出菜单布局正常。 然而,当移动华硕Zenfone2 ZE500CL安装Lollipop(5.0)时,我发现标题和溢出菜单文本布局搞砸了:它们被放在工具栏和溢出菜单列表顶部,而其他菜单项如HomeIndicator和always - 显示的那些保持垂直居中到工具栏中。
我花了一天时间在互联网上试图解决这个问题,但所有问题都是关于混乱的布局,可以通过为工具栏指定合适的高度来解决。很多人建议在工具栏中添加一个TextView来修复标题,我尝试了它,但我的问题更深入,因为溢出菜单项仍然是顶部对齐的。
我无法直接添加屏幕截图,因此我会从Google云端硬盘发布此图片,希望它能让事情更清晰https://drive.google.com/file/d/0BzSgLr3IafUYUGhOS3BlYjY4UjA/view?usp=sharing 在此先感谢您的帮助!
答案 0 :(得分:0)
我最终想出了解决问题的方法;我为那些面临同样问题的人分享它。 我意识到只有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-less版本。 活动布局和类中也需要进行更改:对于样式,我为Lollipop设备创建了活动布局的v21版本,并且仅在原始布局中包含工具栏:into 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。我在我的设备上尝试了应用程序,它终于奏效了。 请注意,对于x21资源的v21版本,我指的是原始文件的副本,保存到&#34; resource_type&#34; -v21文件夹中。