Android-Bitmap-Bildgröße in XML


73

In meiner XML-Datei verwende ich Bitmap wie folgt

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

Hier überschreitet die Bildbreite des Symbols den Bildschirm.

Ich habe Android ausprobiert: width = "100dp" und alles. Aber es funktioniert nicht.

Vollständige XML-Datei:

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

Wie kann ich die Breite und Höhe der obigen Bitmap reduzieren?


Ist es eine schwierige Anforderung, dass Sie eine XML-Ressource verwenden? Es scheint viel einfacher zu sein, eine skalierte Bitmap (durch Code) mit der erforderlichen Größe zu erstellen und diese zu verwenden.
Verlassener Wagen

Antworten:


0

Von Android-Entwicklern habe ich gesehen, dass es kein Tag für Bitmap XML gibt, mit dem Sie die Größe ändern können. Sie müssen dies über einige Grafikanwendungen wie GIMP tun. Wie @ Kevin Cooper bereits sagte, müssen Sie im Idealfall verschiedene Ressourcensätze (mit unterschiedlichen Größen) für unterschiedliche Bildschirmtypen erstellen.

Sie können die Größe jedoch mithilfe der Attribute width und height in ändern ImageView, anstatt eine Bitmap mit unterschiedlicher Größe zu erstellen:

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

Wenn Sie dieses Bild an anderen Stellen wiederverwenden möchten, können Sie einen separaten Stil erstellen und wiederverwenden:

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

Eine andere Möglichkeit der Wiederverwendung besteht darin, eine separate Layoutdatei für eine zu erstellen ImageViewund diese dann in andere Layouts aufzunehmen.

Wenn Sie dies bitmapinnerhalb der Ebenenliste verwenden möchten, lesen Sie bitte die Antwort von @ Kevin Cooper, da er vorgeschlagen hat, dass es möglich ist, Polsterungen hinzuzufügen zu 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>

Und wie @Nicolo auch darauf, Form - API 23, ist es möglich, Satz android:widthund android:height"Punkt.


Nein, es ist eine Ansicht. Ich habe gerade dein Update gesehen. Vielleicht können Sie diese Bildgröße einfach mit einigen
Grafikanwendungen

20
Funktioniert nicht in Layer-Listen, zum Beispiel: in android: drawableLeft-Eigenschaft für benutzerdefinierte Hintergrundgröße in XML. Die Frage ist, die Größe der Bitmap in der Ebenenliste zu ändern. Die Antwort ist falsch.
E-Info128

3
Falsche Antwort auf die Frage, kein ImageView-Tag wird in der Zeichenressource xml unterstützt
Umar Ata

@ e-info128 Meine Antwort schien nicht klar genug zu sein, als ich sagte, ich solle stattdessen "ImageView" verwenden. Ich wollte eine einfache Ansicht mit einer einfachen Bildressource (.png oder .jpg) verwenden, anstatt zu versuchen, eine XML-Bildressource zu erstellen.
Yakiv Mospan

@UmarAta Ich habe meine Antwort aktualisiert. Bitte überprüfen Sie sie und antworten Sie mir, wenn sie immer noch nicht klar genug ist.
Yakiv Mospan

75

Benutz einfach

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

stattdessen

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

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

</item>

38
Benötigt API 23 oder höher
tmm1

Danke, dass du mir Zeit gespart hast
Lewis Weng

56

Obwohl es für Bitmap keine Parameter für Breite und Höhe gibt, können Sie die Bitmap-Größe mithilfe der Schwerkraft und der Breite / Höhe des Elements festlegen.

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

Sie können die Breite und Höhe des Elements festlegen und die Bitmap mithilfe der Schwerkraft skalieren.

Ich weiß, dass dies eine alte Frage ist, aber vielleicht findet es jemand nützlich.

WARNUNG:

Wie bereits in den Kommentaren erwähnt, funktioniert diese Methode NUR mit API Level 23 (Android 6.0) und höher.


29
Hallo, android: width und android: height wird nur ab api 23+ verwendet, daher ist es nicht sehr hilfreich.
KlevisGjN

6
Das hat bei uns funktioniert. Wir mussten android:gravity="center"dem Element jedoch ein Attribut hinzufügen .
TomTom

28

Wenn Sie die Breite und Höhe reduzieren wollen , so dass es auf dem Bildschirm passt, und Sie brauchen nicht maßgenau einzustellen, können Sie einfach eingestellt leftund rightauf dem übergeordneten Element. Dadurch wird im Wesentlichen ein Rand um das Bild hinzugefügt, sodass weniger Platz benötigt wird:

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

Im Idealfall sollten Sie jedoch Bilder unterschiedlicher Größe für jede Bildschirmauflösung (z. B. ) hochladen hdpi, xxhdpiund dann müssen Sie die Größe überhaupt nicht programmgesteuert einstellen. Die vollständige Liste finden Sie hier .


9
Danke für diesen Vorschlag. Es scheint verrückt, dass Sie beim Anlegen eines Begrüßungsbildschirms nicht einfach die Größe des Bildes einstellen können.
Ahalls

2
@ahalls Sie können die Größe festlegen, wenn Sie ein Layout aufblasen, aber aus Leistungsgründen verwenden Begrüßungsbildschirme im Allgemeinen Zeichen anstelle von Layouts, die das Festlegen der Größe nicht zulassen :(
Kevin Cooper

4
Bei dieser Methode erhalte ich ein gestrecktes Bild, oder wenn ich etwas gebe android:gravity="center", verschwindet das Bild unabhängig von den Rändern immer noch vom Bildschirm.
Nathan F.

18

Diese verwende ich, um die Größe meiner Mipmap auf meinem Startbildschirm zu ändern.

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

Nur eine Anmerkung, es funktioniert in API 23 und höher.
Adil Soomro vor

16

Versuchen Sie es so, das hat bei mir funktioniert:

<?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
Breite und Höhe des ziehbaren Gegenstands erfordern API 23+.
Nathan F.

2

Ich habe das Bild nur manuell in der Größe geändert, dann funktioniert es für mich


1

Komplette Lösung Kopieren Sie einfach das Einfügen und ändern Sie den Bildpfad

  <?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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.