当应用程序在真正的Android设备上运行时,虚线实际上没有点缀

sim*_*dam 28 android dotted-line xml-drawable android-drawable

在我的应用程序中,我使用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>
Run Code Online (Sandbox Code Playgroud)

当我在Android Studio中挑选我的布局时,线条会正确地呈现点状,但是当我在真实设备上运行应用程序时出现问题.这条线很稳固,没有间隙.你知道问题出在哪里吗?我尝试了很多不同的设备,包括那些运行最新4.3 Android的设备.它看起来无处不在:/

sto*_*fln 62

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

它在此处记录:https: //code.google.com/p/android/issues/detail?id = 29444

在AndroidManifest.xml中关闭你的HW加速,如下所示:

android:hardwareAccelerated="false"
Run Code Online (Sandbox Code Playgroud)

要么:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null) 
Run Code Online (Sandbox Code Playgroud)

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

  • 您是向导。还是使用Google更好:)谢谢 (2认同)

AZ_*_*AZ_ 21

控制硬件加速

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

  • 应用

  • 活动

  • 窗口

  • 视图

申请级别

<application android:hardwareAccelerated="true" ...>
Run Code Online (Sandbox Code Playgroud)

活动水平

<application android:hardwareAccelerated="true">
    <activity ... />
    <activity android:hardwareAccelerated="false" />
</application>
Run Code Online (Sandbox Code Playgroud)

窗口水平

getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
Run Code Online (Sandbox Code Playgroud)

查看级别

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Run Code Online (Sandbox Code Playgroud)

参考


Dmi*_*vov 9

我在View属性(xml)中找到了相同的解决方案:

        <View
        android:layout_width="wrap_content"
        android:layout_height="4dp"
        ...
        android:layerType="software"/>
Run Code Online (Sandbox Code Playgroud)

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