为什么我的图像按钮水平和垂直翻转?

时间:2018-02-11 20:53:00

标签: android android-studio

我有一个像这样定义的图像按钮

<ImageButton
    android:id="@+id/btnEditWorkDuration"
    android:layout_width="12dp"
    android:layout_height="12dp"
    android:layout_alignParentRight="true"
    android:src="@drawable/edit"
    android:scaleType="centerInside"/>

以下是“设计”标签中的外观:

How it looks in design editor

以及它在文本编辑器中的外观(注意第31行旁边的边框中的drawable不会被翻转)

enter image description here

为什么会这样?

我已将违规的ImageButton移到另一个布局文件中,整个布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >

    <ImageButton
        android:layout_width="12dp" android:scaleType="centerInside"
        android:layout_height="12dp" android:src="@drawable/edit" />

</RelativeLayout>

我已将资源文件夹中的原始图片(edit.png)上传到此网址:http://s000.tinyupload.com/?file_id=27107676428757093272

我的Android Studio版本是2.3.3

2 个答案:

答案 0 :(得分:0)

嗯,我肯定不知道为什么会这样,但我可以确认它发生了。我目前也在使用Android Studio 2.3.3,所以这可能只是这个AS版本的错误。

比例类型android:scaleType="centerInside"应该只是

  

均匀缩放图像(保持图像的纵横比)   图像的尺寸(宽度和高度)将等于或   小于视图的相应尺寸(减去填充)。

(引自documentation

但除此之外,它将drawable旋转180度。顺便说一句,它也发生在材料图标库中的其他png文件中,因此你的edit.png没有任何问题。

我使用android:scaleType="center"摆脱了轮换。但不幸的是,这会导致图标被剪裁,因此它并不能解决您的问题。

可能的解决方法都涉及使用其他图像资源,因此不需要进行缩放,android:scaleType="center"就足够了:

  • 使用尺寸为12dp x 12 dp的矢量绘图。您可以在Android Studio(New - &gt; Vector Asset ...)
  • 中创建一个
  • 从Google的material.io/icons/获取18dp的素材图标zip文件,并将所有png文件复制到具有相同后缀的drawable文件夹中,但复制到具有下一分辨率级别的文件夹中,例如: -mdpi进入-hdpi。 (像往常一样,在复制文件时重命名文件,以便它们都具有相同的名称)这使您没有 mdpi 的资源,因此从zip获取 hdpi 资源使用您最喜欢的图像处理程序将文件缩放到一半大小。

或者,当然,您可以升级到最新的Android Studio版本,因为此时此错误已得到修复。

答案 1 :(得分:0)

我正在使用AS 3.0.1,我可以确认无法重现错误。它使用相同的代码工作正常。也许是一个AS bug