关于根标签是shape的deawable文件中画虚线但是运行在模拟器或者真机上显示为实线的问题,网上也有不少描述说是从Android 4.0开始默认硬件加速导致的。网上给的大部分解决方法是:
在定义shape时,注明android:layerType="software",如果是在Fragment中,就在onCreateView中调用view.setLayerType(View.LAYER_TYPE_SOFTWARE,null);但是,注意但是:测试无效,至少我在recycle人View中用作divider是没有任何卵用的。他的代码是:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="1dp" android:color="#00ff00" android:dashGap="10dp" android:dashWidth="2dp" android:layerType="software"/> </shape>
还有一种说法:在定义View的时候写android:layerType="software"。代码是这样的:
<View android:layout_width="match_parent" android:layout_height="10dp" android:background="@drawable/divider_bg" android:layerType="software" />
这种说法还靠谱一些,但是,还是要注意但是:如果只是使用View来画一条虚线,这样没问题,但是我的需求是将其设置为divider,如果我在recyclerview中设置layerType属性,依然没有效果。
下面是真正的解决方法:在AndroidManifest中为<application>标签设置设置android:hardwareAccelerated="false"。
代码:
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:hardwareAccelerated="false">
如果你不想让整个application都关闭硬加速,你也可以将这条属性设置在需要关闭应加速的activity中而不对application标签进行设置:
<activity android:name=".LinearManagerActivity" android:screenOrientation="portrait" android:hardwareAccelerated="false"/>
这样做就完全没有问题了
如果大家还有其他解决方法或者上面几种方法都不起租用,欢迎留言讨论,本人求知若渴,在此恭候。