Пунктирная линия на самом деле не пунктирована, когда приложение работает на реальном устройстве 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") у меня не работали.