31

在我的应用程序中,我使用 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 的设备。它看起来到处都是一样的:/

4

3 回答 3

74

这很可能与硬件加速有关:GL 模式不支持虚线。

它记录在这里: https ://code.google.com/p/android/issues/detail?id=29944

在 AndroidManifest.xml 中关闭硬件加速,如下所示:

android:hardwareAccelerated="false"

或者:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null) 

有关如何使用第一个解决方案的更多信息:http: //developer.android.com/guide/topics/graphics/hardware-accel.html

于 2013-09-21T10:52:31.760 回答
24

控制硬件加速

您可以在以下级别控制硬件加速:

  • 应用

  • 活动

  • 窗户

  • 看法

应用层

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

参考

于 2014-10-10T09:32:17.397 回答
15

我找到了相同的解决方案,但在查看属性(xml)中:

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

我想这是上面所说的视图级别。属性的其他变体(“无”,当然还有“硬件”)对我不起作用。

于 2018-10-23T20:33:20.703 回答