Android工具栏:仅限5.0

时间:2015-08-03 10:52:10

标签: android android-layout toolbar material-design

我正在按照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 在此先感谢您的帮助!

1 个答案:

答案 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文件夹中。