【问题标题】:Android Toolbar: title and overflow menus aligment issue on 5.0 onlyAndroid 工具栏:仅 5.0 上的标题和溢出菜单对齐问题
【发布时间】:2015-08-03 10:52:10
【问题描述】:

我正在开发一个遵循 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" >

然后我在 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 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了。活动标题在 Manifest 中,而菜单项属性编码在各自的 xml 文件中。

我在三星 s3 mini(Android 版本:4.1.2)上试用了我的应用程序,它运行良好。标题和菜单图标在工具栏的垂直中心完美对齐,溢出菜单布局还可以。 然而,在安装 Lollipop (5.0) 的华硕 Zenfone2 ZE500CL 上移动时,我发现标题和溢出菜单文本布局混乱:它们被卡在工具栏和溢出菜单列表顶部,而其他菜单项,如 HomeIndicator 和总是-显示的保持垂直居中在工具栏中。

我在 Internet 上花了一天时间试图弄清楚这一点,但所有问题都与混乱的布局有关,可以通过为工具栏指定适当的高度来解决这些问题。很多人建议在工具栏中添加一个 TextView 来修复标题,我试过了,但我的问题更深了,因为溢出菜单项仍然是顶部对齐的。

我不能直接添加截图,所以我从 Google Drive 发布这张图片,希望它能让事情更清楚https://drive.google.com/file/d/0BzSgLr3IafUYUGhOS3BlYjY4UjA/view?usp=sharing 提前感谢您的帮助!

【问题讨论】:

    标签: android android-layout toolbar material-design


    【解决方案1】:

    我最终想出了解决问题的方法;我正在为面临同样问题的人分享它。 我意识到只有棒棒糖之前的设备才需要工具栏,所以我为应用程序创建了两个不同的主题:一个在 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>
    

    这样,每当棒棒糖之前的设备启动应用程序时,它都会启动无 ActionBar 版本。 Activity 布局和类也需要更改:至于样式,我为 Lollipop 设备创建了 v21 版本的 Activity 布局,并将工具栏仅包含在原始布局中:放入 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);
        }
    

    仅用于填充棒棒糖前设备上的空操作栏。我在我的两台设备上都尝试了该应用程序,它终于奏效了。 请注意,对于 xml 资源的 v21 版本,我的意思是原始文件的副本,保存到“resource_type”-v21 文件夹中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      相关资源
      最近更新 更多