XML中的Android位图图像大小


74

在我的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资源是否有严格的要求?创建所需大小的缩放位图(通过代码)并使用它似乎要容易得多。
被遗弃的购物车

Answers:


2

Android开发人员那里,我看到没有用于位图XML的标签可以更改其大小。您需要通过一些图形应用程序(例如GIMP)来执行此操作。正如@Kevin Cooper所说,理想情况下,您需要为不同的屏幕类型创建不同的资源集(具有不同的大小)。

但是,您仍然可以使用中的width和height属性来调整其大小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形式中,可以进行设置android:widthandroid:height"项目设置。


不,它是一个视图。我刚刚看到了您的更新。也许您可以简单地使用某些图形应用程序(例如Pain NET或其他工具)更改该图像的大小
Yakiv Mospan 2014年

21
在图层列表中不起作用,例如:在android:drawableLeft属性中,用于xml中的自定义背景可绘制大小。问题是调整图层列表中位图的大小,响应不正确。
e-info128 '16

3
问题的答案不正确,可绘制资源xml内不支持ImageView标记
Umar Ata

@ e-info128似乎我的回答还不够清楚,当我告诉我使用“ ImageView代替”时,我的意思是使用具有简单图像资源(.png或.jpg)的简单视图,而不是尝试创建xml图像资源。
Yakiv Mospan '17

@UmarAta我已经更新了我的答案,如果仍然不清楚,请检查一下并回复我。
亚基夫·莫斯潘

77

仅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>

41
需要API 23或更高版本
tmm1

58

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

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

您可以使用重力在其中设置项目的宽度和高度以及比例位图。

我知道这是个老问题,但也许有人会发现它有用。

警告:

正如评论中已经提到的,此方法仅适用于API级别23(Android 6.0)及更高版本。


29
嗨,android:width和android:height仅用于un api 23+,因此它不是很有帮助。
KlevisGjN

6
这对我们有用。我们需要将android:gravity="center"属性添加到该项目。
TomTom

28

如果要减小宽度和高度,使其适合屏幕尺寸,并且不需要设置确切的尺寸,只需在父项上设置left和即可right。这实际上将在图像周围增加边距,从而占用更少的空间:

<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),然后你就不需要在所有程序设置的大小。您可以在此处查看完整列表。


9
感谢您的建议。布置启动屏幕时不能仅设置图像大小似乎很疯狂。
2016年

2
@请告诉我们,如果您为布局充气,可以设置大小,但是出于性能原因,初始屏幕通常使用可绘制对象而不是布局,这不允许设置大小:(
Kevin Cooper

5
使用这种方法时,我最终得到的图像是拉伸的,或者,如果我提供的话android:gravity="center",无论边缘如何,图像仍会离开屏幕。
内森·F

19

我用于将Mipmap调整到启动屏幕的尺寸。

<?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>

16

尝试以这种方式进行操作,这对我有用:

<?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+。
内森·F


2

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

  <?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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.