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_horizontal|fill_vertical" 非常感谢。【参考方案3】:
如果您想减小宽度和高度以使其适合屏幕,并且不需要设置精确尺寸,您只需在父项上设置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>
不过,理想情况下,您应该为每种屏幕分辨率上传不同尺寸的图像(例如hdpi
、xxhdpi
),然后您根本不需要以编程方式设置尺寸。您可以查看完整列表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:width
和 android: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位图图像大小的主要内容,如果未能解决你的问题,请参考以下文章