Erstellen eines leeren Drawable in Android




(7)

Die Erstellung eines vollständig leeren Drawable scheint ein allgemeines Bedürfnis zu sein, als Platzhalter, Ausgangszustand usw., aber es scheint keine gute Möglichkeit zu geben, dies zu tun ... zumindest in XML. Mehrere Stellen beziehen sich auf die Systemressource @android:drawable/empty aber soweit ich das @android:drawable/empty kann (dh es befindet sich nicht in den Referenzdokumenten, und aapt drosselt, dass es die Ressource nicht finden kann), existiert dies nicht.

Gibt es eine allgemeine Möglichkeit, ein leeres Drawable zu referenzieren, oder erstellen Sie für jedes Projekt eine falsche leere PNG-Datei?


Answers

Ich verwende eine leere ShapeDrawable , dh ich erstelle meine eigene drawable / empty.xml, die nur <shape/>


Für mich hat es nicht funktioniert, als ich versucht habe, @android:id/empty zu verwenden, wenn ich ein leeres Zeichen mache. Für mich @android:color/transparent war das eine.


<shape />

schafft eine leere Form und macht den Trick für mich. Oder erstellen Sie eine Datei empty_drawable.xml, die Folgendes enthält:

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

Sie können es also woanders verwenden.

Sie können eine Form auch verschwinden lassen, wenn die Ansicht, in der sie verwendet wird, nicht aktiviert wird, indem Sie my_disablable_view.xml erstellen:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true">
        <shape android:shape="oval">
            <size android:height="10dp" android:width="10dp" />
            <solid android:color="@android:color/white" />
        </shape>
    </item>
    <item android:state_enabled="false">
        <shape />
    </item>
</selector> 

Die Verwendung von @android: drawable / empty würde für mich einen Fehler anzeigen und das Kompilieren verhindern. Mit @android: id / empty wurde der Fehler behoben und ich ließ mich kompilieren, zeigte jedoch im Eclipse-Layout-Editor "NullPointerException: null". Ich habe es in @android geändert: color / transparent und jetzt ist alles in Ordnung.

Ich kann noch nicht abstimmen, sonst hätte ich Emils Antwort.


Kai, ich weiß nicht warum das so ist, aber ich habe das gleiche Problem bekommen. Ich denke, es könnte mit der Version von Android zusammenhängen, für die Sie kompilieren. In jedem Fall habe ich festgestellt, dass einfach @android: id / empty verwendet wird, wo Sie @android: drawable / empty verwenden würden.


@null in XML hat den gleichen Effekt wie die Verwendung einer null als Drawable in Java.


Ein Drawable kann auf ein Canvas gezeichnet werden und ein Canvas kann durch ein Bitmap :

(Aktualisiert, um eine schnelle Konvertierung für BitmapDrawable s zu verarbeiten und sicherzustellen, dass die erstellte Bitmap eine gültige Größe hat)

public static Bitmap drawableToBitmap (Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable)drawable).getBitmap();
    }

    int width = drawable.getIntrinsicWidth();
    width = width > 0 ? width : 1;
    int height = drawable.getIntrinsicHeight();
    height = height > 0 ? height : 1;

    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}




android