切换到支持库 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
上修复
昨天我切换到新的支持库 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
上修复