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

时间:2017-08-03 08:28:12

标签: android android-layout android-support-library android-toolbar android-support-design

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

我遇到的问题与下面的链接中描述的相同,但“清理”或“重建”无法解决问题。 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

<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之前的屏幕截图: enter image description here

这是升级后: enter image description here

更新: 当我将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>

enter image description here

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

请参阅: public void setIcon(Drawable icon) ...

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

如果您在更改为AppCompatActivity后显示两个具有相同设计和比较的App Bar会更好。

答案 2 :(得分:1)

在Android问题跟踪器上查看此主题,我在其中解释了错误:https://issuetracker.google.com/issues/64207386。我还重新编译了库以解决问题。附在此处:https://issuetracker.google.com/issues/64207386#comment19

编辑:问题已于26.0.2修复