2012-06-01 6 views
22

Das Folgende ist eine gestrichelte Linie, definiert als ShapeDrawable in XML:Android gestrichelte Linie ziehbar Potential ICS Fehler

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line"> 

    <size 
     android:height="2dp" 
     android:width="700dp" /> 

    <stroke 
     android:width="1dp" 
     android:color="@android:color/black" 
     android:dashWidth="1dp" 
     android:dashGap="2dp" /> 

</shape> 

Das wird eine schöne gepunktete Linie auf mehrere Lebkuchen-Telefone zeichnen. Auf dem Galaxy Nexus jedoch werden die Bindestriche ignoriert und die Form wird als zusammenhängende Linie gezeichnet. Noch seltsamer ist, dass ein Emulator, der ICS ausführt, es korrekt mit den Bindestrichen rendert, es ist nur das physische Gerät, das es vermasselt.

Fehle ich etwas offensichtlich? Oder ist das wirklich ein Bug mit Android 4.0? Die Linie wird an mehreren Stellen verwendet. Hier ist ein Beispiel Image:

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="@dimen/observation_observe_side_margin" 
    android:layout_marginRight="@dimen/observation_observe_side_margin" 
    android:layout_marginTop="16dp" 
    android:contentDescription="@string/dotted_line_description" 
    android:src="@drawable/dotted_line" /> 
+0

Ich merke das gleiche Problem auf meiner App auf dem Galaxy Nexus. Auf meinen anderen Geräten 2.x erscheint es als gepunktet. –

+0

Duplikat von http://Stackoverflow.com/a/26296229/185022 –

+0

mögliches Duplikat von [Die gepunktete Linie ist eigentlich nicht gepunktet, wenn die App auf einem echten Android-Gerät ausgeführt wird] (http://stackoverflow.com/questions/18931679/dotted) -line-ist-eigentlich-nicht-gepunktet-wenn-app-läuft-auf-real-android-gerät) –

Antwort

43

Die bei http://code.google.com/p/android/issues/detail?id=29944 angemeldet Ausgabe hat einen Kommentar von den folgenden zu Ihrer Ansicht Anwendung:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null) 

Das ist für mich gearbeitet.

+27

Beachten Sie, dass Sie, wenn Sie die Ansicht nicht programmgesteuert bearbeiten möchten, auch das Attribut 'android: layerType =" software "' zur XML-Definition hinzufügen können. – Arkaaito

+0

API 11+ http://developer.android.com/reference/android/view/View.html#setLayerType – Dori

+0

so in dem Beispiel in der Frage. Würden Sie 'android: layerType =" software "' auf 'ImageView' oder' 'shape'' setzen? –