3

昨天我切换到新的支持库26,我也不得不将已弃用的AppBarActivity更改为AppCompatActivity,因为这不再存在。切换到支持库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

UPDATE: 它工作时,我直接把一个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) ...

回答

1

在Android问题跟踪器中查看此线程,我在此解释该错误:https://issuetracker.google.com/issues/64207386。我也重新编译了这个库来解决这个问题。附于此处:https://issuetracker.google.com/issues/64207386#comment19

编辑︰问题是固定的26.0.2

+1

很高兴看到此问题在26.0.1中仍未解决。 Google工作不错! – stefan

+1

@stefan我已经重新编译了appcompat-v7库并修复了这个问题。我在这里附上了AAR文件:https://issuetracker.google.com/issues/64207386#comment19 – Gianlu

+1

我已经看到了,但我会等到它正式修复。我不需要任何新的支持库。我只想保持最新状态,这在使用Android/Google时总是一件坏事。 无论如何,你做得很好!谢谢! – stefan

1

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

第一个酒吧由第二行与km组成,它扩展了App Bar的高度包装两种文字浏览。第二个图标会缩小,因为它们的属性也可能设置为wrap_content。

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

+0

对不起,但我不明白你的答案完全。 “这两个应用程序栏”是什么意思?我只有一个。我也无法想象这是问题,因为我在“活动”中没有“小标题”中的相同行为 – stefan

+0

只更新了我的照片,以使它们来自相同的状态(但是,这没有区别) – stefan

+0

@stefan,你可以尝试用矢量drawable替换加油站drawable吗? [链接](https://material.io/icons/#ic_local_gas_station)并检查它是否正确缩放?另外使用[link](http://inloop.github.io/svg2android/)将svg转换为Android可绘制。第一个屏幕上的图像比文本和点更大,第二个屏幕上的图像都是相同的。 – Maciej

3

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

+0

我不认为这是一种“解决方法”,我认为这是解决方案。这也发生在我身上,这是因为我的图像太大而无法开始。这引起了我的注意,现在我的图像大小正确。 – yuval

+2

对我来说这是一个sdk中的错误,你只需要检查ActionMenuItemView的代码,参见setIcon()。不恰当地调整图标大小的原因是什么?如果他们的尺寸很大但是双方都应该保持相同的尺寸,可以重新调整尺寸!我切换回到以前的版本,因为我的所有图像的尺寸都非常精确,如文档中所述:hdpi = 72px xhdpi 96px – stefan

+2

Android团队已经意识到了这个问题。 https://issuetracker.google.com/issues/64207386发现此问题跟踪器 –