Пунктирная линия на самом деле не пунктирована, когда приложение работает на реальном устройстве Android

в моем приложении Я использую XML, обозначенный вертикальной пунктирной линией.

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

    android:shape="line">
    <stroke

        android:width="1dp"
        android:color="@color/light_gray"
        android:dashWidth="2dp"
        android:dashGap="4dp"
        />
</shape>

Когда я зачищаю свой макет в Android Studio, строка отображается правильно, как и должно быть, но проблема возникает, когда я запускаю приложение на реальном устройстве. Линия просто прочная, без пробелов. Знаете, где может быть проблема? Я пробовал много разных устройств, включая те, которые работают с новейшим 4.3 Android. Он выглядит везде одинаковым:/

Ответ 1

Скорее всего, это связано с аппаратным ускорением: пунктирные линии не поддерживаются в режиме GL.

Его документально подтверждено здесь: https://code.google.com/p/android/issues/detail?id=29944.

Отключите HW-ускорение в вашем AndroidManifest.xml следующим образом:

android:hardwareAccelerated="false"

или же:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null) 

Для получения дополнительной информации о том, как использовать первое решение: http://developer.android.com/guide/topics/graphics/hardware-accel.html

Ответ 2

Управление ускорением аппаратного обеспечения

Вы можете управлять аппаратным ускорением на следующих уровнях:

  • Приложение

  • активность

  • Окно

  • Вид

Уровень приложения

<application android:hardwareAccelerated="true" ...>

Уровень активности

<application android:hardwareAccelerated="true">
    <activity ... />
    <activity android:hardwareAccelerated="false" />
</application>

Уровень окна

getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

Уровень представления

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Ссылка

Ответ 3

Я нашел то же решение, но в атрибутах просмотра (xml):

        <View
        android:layout_width="wrap_content"
        android:layout_height="4dp"
        ...
        android:layerType="software"/>

Я полагаю, это уровень просмотра, как сказано выше. Другие варианты атрибута ("none" и, конечно, "hardware") у меня не работали.