切换到支持库 26 和 AppBarActivity 到 AppCompatActivity 后工具栏菜单项被挤压

Toolbar menu items squeezed after switching to support library 26 and AppBarActivity to AppCompatActivity

昨天我切换到新的支持库 26,我还不得不将已弃用的 AppBarActivity 更改为 AppCompatActivity,因为它不再存在了。

我遇到了下面 link 中描述的相同问题,但 "clean" 或 "rebuild" 没有解决问题。 Why option menu items squeezed if I use support library 26?

我的所有图标都是 hdpi 和 xhdpi。一些也在 mdpi 和 ldpi 中...

为什么我的工具栏图标会被挤压?

这是我在所有布局中使用的代码,它适用于所有以前的支持库(而且我总是使用最新版本!):

   <android.support.design.widget.AppBarLayout
    android:id="@+id/myAppBar"
    android:layout_width="match_parent"


    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/my_awesome_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:minHeight="?attr/actionBarSize" />
</android.support.design.widget.AppBarLayout>

我所有的图标都定义为 attr,这样我就可以提供浅色和深色版本。

<item
        android:id="@+id/action_logbook"
        android:icon="?attr/icon_book"
        android:orderInCategory="100"
        android:title="@string/logbook"
        yourapp:showAsAction="ifRoom"/>

这是icons.xml

中的属性
<attr name="icon_book" format="reference"/>

这是提供实际图标的样式:

  <style name="MyBaseThemeLight" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="icon_book">@drawable/icon_book_white</item>
</style>

这是支持版本 26.0.0 之前的屏幕截图:

这是升级后的样子:

更新: 当我将 ImageView 直接放在工具栏中时它正在工作:

 <android.support.design.widget.AppBarLayout
    android:id="@+id/myAppBar"
    style="@style/myAppBarStyle"
    android:layout_width="match_parent"

    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/my_awesome_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="?attr/bt_expenses" />


    </android.support.v7.widget.Toolbar>


</android.support.design.widget.AppBarLayout>

更新 2: 对我来说,ActionMenuItemView 版本 26 中的代码更改似乎是问题所在,因为它不会调整图标大小以保持宽度和高度相等:

见: public void setIcon(Drawable icon) ...

这两个动作条不同。最小高度是根据属性设置的,但两者的高度值都设置为 wrap_content.

第一个栏包含带有 km 的第二行,它通过 wrapping 两个文本视图来扩展 App Bar 的高度。第二个图标缩小了,因为它们的属性可能也设置为 wrap_content.

换成AppCompatActivity后如果能同时展示两个相同设计和对比的应用栏就更好了。

解决方法似乎是使用 Android Studio 中的 Image Asset Studio 再次生成图标资源。我以前没有使用那个工具,而是手动将图标图像放在不同分辨率的文件夹中。似乎 com.android.support:appcompat-v7:26.0.0 更改了图像分辨率,我的旧 hdpi 图标是 72x72,为 hdpi 生成的图标现在是 48x48。

在 Android 问题跟踪器上查看此线程,我在其中解释了错误:https://issuetracker.google.com/issues/64207386. I've also recompiled the library to fix the issue. Attached here: https://issuetracker.google.com/issues/64207386#comment19

编辑:问题已在 26.0.2

上修复