XML中的Android位图图像大小

Posted

技术标签:

【中文标题】XML中的Android位图图像大小【英文标题】:Android bitmap image size in XML 【发布时间】:2014-05-29 13:11:58 【问题描述】:

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

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

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

我尝试了 android: 等等。但它不起作用。

完整的 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: 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 资源是硬性要求吗?创建所需大小的缩放位图(通过代码)并使用它似乎要容易得多。 【参考方案1】:

仅 API 23 或更高版本

随便用

<item
    android:
    android:
    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>

【讨论】:

需要 API 23 或更高版本【参考方案2】:

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

<item
    android:
    android:>
    <bitmap
        android:gravity="fill_horizontal|fill_vertical"
        android:src="@drawable/screen" />
</item>

您可以使用重力设置项目的宽度和高度并在其中缩放位图。

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

警告:

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

【讨论】:

嗨,android:width 和 android:height 仅在 api 23+ 中使用,所以它不是很有帮助。 这对我们有用。不过,我们需要为项目添加android:gravity="center" 属性。 只是 src 和这个 android:gravity="fill_horizo​​ntal|fill_vertical" 非常感谢。【参考方案3】:

如果您想减小宽度和高度以使其适合屏幕,并且不需要设置精确尺寸,您只需在父项上设置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。

【讨论】:

感谢您的建议。布局启动画面时不能只设置图像的大小,这似乎很疯狂。 @ahalls 你可以设置大小,如果你膨胀一个布局,但出于性能原因,初始屏幕通常使用可绘制而不是布局,它不允许设置大小: ( 使用此方法时,我会得到一个拉伸的图像,或者,如果我提供android:gravity="center",则无论页边距如何,图像仍然会离开屏幕。【参考方案4】:

我用这个来调整我的 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:
        android:
        android:gravity="center">
        <bitmap
            android:gravity="fill"
            android:src="@mipmap/ic_launcher"
            android:mipMap="true"/>
    </item>
</layer-list>

【讨论】:

很好的答案,对我有用,仅供参考需要 API 23+【参考方案5】:

尝试这样做,这对我有用:

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

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

</layer-list>

【讨论】:

可绘制项目的宽度和高度需要 API 23+。【参考方案6】:

来自Android Developers 我看到没有用于位图 XML 的标记允许您更改它的大小。您需要通过一些图形应用程序(如 GIMP)来执行此操作。正如@Kevin Cooper 所说,理想情况下,您需要为不同的屏幕类型创建不同的资源集(具有不同的大小)。

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

<ImageView
    android:layout_
    android:layout_
    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 之类的图形应用程序或其他方式简单地更改图像大小 在图层列表中不起作用,例如:在 android:drawableLeft 属性中用于自定义背景可绘制尺寸在 xml 中。问题是resize bitmap in layer list,响应不正确。 问题答案不正确,可绘制资源xml中不支持ImageView标签 @e-info128 似乎我的回答不够清楚,当我告诉使用“ImageView 而不是”时,我的意思是使用简单的视图和简单的图像资源(.png 或 .jpg)而不是正在尝试创建 xml 图像资源。 @UmarAta 我已经更新了我的答案,如果还不够清楚,请查看并回复我。【参考方案7】:

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

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

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

 <item
    android:gravity="center"
    android:
    android:>

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

【讨论】:

【参考方案8】:

所以我通过键入以下内容解决了这个问题:

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

【讨论】:

【参考方案9】:

我只是手动调整了图像的大小然后它对我有用

【讨论】:

【参考方案10】:

1.Step 1:将android:background=添加到Spinner/AppCompatSpinner

 <androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/spinner"
            android:layout_
            android:layout_
            android:background="@drawable/shape_drop_down_normal"
            />
    /drawable 中创建一个shape_drop_down_normal.xml

2A) 如果您有用于 Spinner 位图的 ic_spinner_dropdown.png 可绘制资源

shape_drop_down_normal.xml

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

2B) 如果您有用于 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:
        android:
        android:gravity="end|center_vertical"
        android:drawable="@drawable/ic_spinner_dropdown_vector">
    </item>
</layer-list>

    警告!

    android: android:

在层列表中需要 API 23+, 使用

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

对于较低的 API 级别,或者简单地省略宽度和高度约束,并直接在 vector drawable 中设置 dp(它适用于所有 API 级别)。

【讨论】:

以上是关于XML中的Android位图图像大小的主要内容,如果未能解决你的问题,请参考以下文章

比较 Android 中的位图图像

在android上调整位图大小的最节省内存的方法?

如何从 android 中的 sdcard 图像创建位图?

如何在不损失 Android 分辨率的情况下减小位图的大小?

将相机图像作为位图 Android 示例

Android 位图平移/缩放/裁剪