Размер растрового изображения Android в XML

В моем 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>

Как я могу уменьшить ширину и высоту вышеупомянутого растрового изображения?

Ответ 1

Из Android-разработчики Я увидел, что для Bitmap 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, поскольку он предположил, что можно добавить paddings в 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" в элемент.

Ответ 2

Несмотря на отсутствие параметров ширины и высоты для растрового изображения, вы можете установить размер растрового изображения с использованием силы тяжести и ширины и высоты элемента.

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

Вы можете установить ширину, высоту и масштаб растрового изображения, используя гравитацию.

Я знаю, что это старый вопрос, но, возможно, кто-то найдет его полезным.

Внимание:

Как уже упоминалось в комментариях, этот метод ТОЛЬКО работает с уровнем API 23 (Android 6.0) и выше.

Ответ 3

Просто используйте

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

Ответ 4

Если вы хотите уменьшить ширину и высоту, чтобы она соответствовала экрану, и вам не нужно устанавливать точные размеры, вы можете просто установить 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), а затем вам не нужно будет программно устанавливать размер вообще. Вы можете увидеть полный список здесь.

Ответ 5

Попробуйте сделать это так, это сработало для меня:

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

Ответ 6

Я просто изменил размер изображения вручную, тогда он работает для меня

Ответ 7

этот я использую для изменения размера моего 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>