在XML中设置Android位图图像大小

92

在我的XML文件中,我使用位图如下:

<bitmap
    android:src="@drawable/Icon"
    android:gravity="center"/>

这里的图标宽度超出了屏幕大小。

我尝试了android:width="100dp"等方法,但都没有起作用。

完整的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
      <shape android:shape="rectangle">
            <stroke android:width="3dp" android:color="@color/black" />
            <solid android:color="@color/bg_green" />
        </shape>
   </item>
   <item>
    <bitmap
        android:src="@drawable/Icon"
        android:gravity="center"/>
    </item>
</layer-list>

我该如何减小上述位图的宽度和高度?


你是否必须使用XML资源?通过代码创建所需大小的缩放位图并使用它似乎更容易。 - Abandoned Cart
10个回答

105

仅支持API 23或更高版本

只需使用

<item
    android:width="200dp"
    android:height="200dp"
    android:drawable="@drawable/splash_background"
    android:gravity="center" />

相反

<item
    android:left="200dp"
    android:right="200dp">

    <bitmap
        android:src="@drawable/splash_background"
        android:gravity="center" />

</item>

50
需要API 23或更高版本。 - tmm1

71

虽然位图没有宽度和高度参数,但您可以使用重力和项目的宽度/高度来设置位图大小。

<item
    android:width="230dp"
    android:height="70dp">
    <bitmap
        android:gravity="fill_horizontal|fill_vertical"
        android:src="@drawable/screen" />
</item>

使用gravity属性,您可以设置项的宽度和高度,并缩放其中的位图。

我知道这是一个老问题,但也许有人会觉得它有用。

警告:

如评论中已经提到的,此方法仅适用于API级别23(Android 6.0)及以上。


30
你好,android:width和android:height只在API 23及以上版本中使用,因此它们并不是很有用。 - KlevisGjN
8
这对我们很有用。不过,我们需要在该项中添加 android:gravity="center" 属性。 - TomTom
只是 src 和这个 android:gravity="fill_horizontal|fill_vertical" 完美地工作了,谢谢。 - Ihdina

33

如果你希望减小图片的宽度和高度,以便它适应屏幕大小,并且没有必要设置精确的尺寸,那么只需在父级元素上设置leftright即可。这将在图片周围添加边距,从而使其占用更少的空间:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:left="20dp"
        android:right="20dp">

        <bitmap
            android:src="@drawable/Icon"
            android:gravity="center" />

    </item>

</layer-list>
理想情况下,您应该为每个屏幕分辨率上传不同尺寸的图像(例如hdpixxhdpi),然后您就不需要以编程方式设置大小。您可以在此处查看完整列表:here

11
谢谢您的建议。看起来很荒谬,当您布置启动画面时无法直接设置图像的大小。 - ahalls
2
@ahalls,如果您膨胀布局,则可以设置大小,但出于性能原因,启动画面通常使用可绘制对象而不是布局,这不允许设置大小 :( - Kevin Cooper
6
使用这种方法时,我的图像会被拉伸,即使我添加了“android:gravity="center"”,无论边距设置成什么,图像仍然会超出屏幕。 - Nathan F.

29

我用它来将我的多级纹理调整到启动画面的大小。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
    <item android:drawable="@color/colorPrimary"/>
    <item
        android:width="200dp"
        android:height="200dp"
        android:gravity="center">
        <bitmap
            android:gravity="fill"
            android:src="@mipmap/ic_launcher"
            android:mipMap="true"/>
    </item>
</layer-list>

2
很棒的答案,对我有用,FYI 需要API 23+。 - seekingStillness

20

试着按照这种方法去做,这个方法对我起到了作用:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  <item
    android:width="30dp"
    android:height="30dp"
    android:gravity="center"
  >
        <bitmap
       android:src="@drawable/screen"/>
  </item>

</layer-list>

4
图像资源的宽度和高度需要API 23及以上版本。 - Nathan F.

8
Android Developers 上了解到,没有为Bitmap XML设置更改大小的标签。您需要通过一些图形应用程序(如GIMP)来完成此操作。正如 @Kevin Cooper 已经提到的那样,最好为不同屏幕类型创建不同大小的资源集。

但是,仍然可以使用ImageView中的宽度和高度属性来调整其大小,而无需创建不同大小的位图:

<ImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:scaleType="center"
    android:src="@drawable/Icon" />

如果您想在其他地方重复使用此图像,可以创建单独的样式并重复使用它:

// in styles.xml
<style name="Icon24x24">
    <item name="android:src">@drawable/Icon</item>
    <item name="android:gravity">center</item>
    <item name="android:layout_width">24dp</item>
    <item name="android:layout_height">24dp</item>
</style>

// in layout.xml
<ImageView style="@style/Icon24x24"/>

另一种重复使用的方式可能是为一个ImageView创建单独的布局文件,然后将其包含在其他布局中。

如果您想在图层列表中使用此bitmap,请参见@Kevin Cooper的答案,因为他建议可以向layer list item添加填充:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="20dp"
        android:right="20dp">
        <bitmap
            android:src="@drawable/Icon"
            android:gravity="center" />
    </item>
</layer-list>

正如 @Nicolo 所指出的,从API 23开始,可以在item中设置 android:widthandroid:height"


不是,这是一个视图。我刚看到你的更新。也许你可以用一些图形应用程序(如Pain NET或其他)简单地更改该图像的大小。 - Yakiv Mospan
27
无法在层列表中使用,例如:在 XML 中用于自定义背景 drawable 大小的 android:drawableLeft 属性中。问题是重新调整层列表中的位图大小,答案不正确。 - e-info128
4
问题的答案不正确,Drawable资源XML中不支持ImageView标签。 - Umar Ata
@e-info128 看起来我的回答不够清晰,当我建议使用“ImageView”时,我是指使用简单的视图和简单的图像资源(.png或.jpg),而不是尝试创建XML图像资源。 - Yakiv Mospan
@UmarAta 我已经更新了我的答案,请查看并回复我,如果还不够清楚的话。 - Yakiv Mospan
@YakivMospan 这是一种非常不规则的处理问题的方式。即使经过所有更新,将一组xml文件作为缩放图像的解决方法似乎是适得其反的。 - Abandoned Cart

7

那么我通过输入以下内容来解决这个问题:

<item
  android:height= "250dp"
  android:width= "250dp"
  android:gravity="center">
   <bitmap
    android:gravity="fill_horizontal|fill_vertical"
    android:src="@mipmap/ic_launcher"/>
</item>

5

完整解决方案,只需复制粘贴并更改图片路径。

  <?xml version="1.0" encoding="utf-8"?>

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

 <item
    android:gravity="center"
    android:width="286dp"
    android:height="176dp">

    <bitmap
        android:src="@drawable/logo"
        android:gravity="fill_horizontal|fill_vertical" />
   </item>
 </layer-list>

3

我刚刚手动调整了图片大小,然后它就可以正常使用了。


2

1. 第一步:将android:background=添加到Spinner/AppCompatSpinner中。

 <androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="@dimen/input_height"
            android:background="@drawable/shape_drop_down_normal"
            />
  1. /drawable 文件夹中创建一个名为 shape_drop_down_normal.xml 的文件

2A)如果您有适用于Spinner位图的 ic_spinner_dropdown.png drawable 资源

shape_drop_down_normal.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:width="20dp"
        android:height="13dp"
        android:gravity="end|center_vertical">
        <bitmap
            android:src="@drawable/ic_spinner_dropdown"
            android:gravity="fill"
            android:mipMap="true"/>
    </item>
</layer-list>

如果您有一个用于 Spinner 位图的 ic_spinner_dropdown_vector.xml 矢量可绘制资源,则需要使用 shape_drop_down_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:width="20dp"
        android:height="13dp"
        android:gravity="end|center_vertical"
        android:drawable="@drawable/ic_spinner_dropdown_vector">
    </item>
</layer-list>
  1. 警告!

    在layer-list中使用android:width="20dp"和android:height="13dp"需要API 23+,请注意。

建议使用:

android:left="20dp"
android:right="13dp" 

对于较低的API级别,或者只需省略宽度和高度限制,在矢量图形中直接设置dp(它适用于所有API级别)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接