Android 无法在旧的API中以编程方式修改层列表元素

Android 无法在旧的API中以编程方式修改层列表元素,android,layer-list,Android,Layer List,下面的android代码创建了一个背景为圆形的TextView。单击时,会在其周围创建一个圆。如果再次单击,则圆圈将消失。这在API 19中可以正常工作,但在API 8或10中则不行。在那些旧的API中,单击时不会绘制圆形边界。这里有什么问题 活动\u main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a

下面的android代码创建了一个背景为圆形的
TextView
。单击时,会在其周围创建一个圆。如果再次单击,则圆圈将消失。这在API 19中可以正常工作,但在API 8或10中则不行。在那些旧的API中,单击时不会绘制圆形边界。这里有什么问题

活动\u main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffffff" >
 <TextView
    android:id="@+id/col1"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/circle_notapped"
   android:layout_gravity="center"
   android:layout_marginTop="50dp"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/pat1" android:top="0dp" android:left="0dp" android:right="0dp" android:bottom="0dp">
<shape android:shape="oval">
    <solid android:color="#FFFFFFFF" />
</shape>
</item>
<item android:id="@+id/pat2" android:top="3dp" android:left="3dp" android:right="3dp" android:bottom="3dp">
<shape android:shape="oval">
    <solid android:color="#FFFFFFFF" />
</shape>
</item>
<item android:id="@+id/pat3" android:top="6dp" android:left="6dp" android:right="6dp" android:bottom="6dp">
<shape android:shape="oval">
    <solid android:color="#FF27AE60" />
</shape>
</item>
</layer-list>
circle\u notapped.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffffff" >
 <TextView
    android:id="@+id/col1"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/circle_notapped"
   android:layout_gravity="center"
   android:layout_marginTop="50dp"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/pat1" android:top="0dp" android:left="0dp" android:right="0dp" android:bottom="0dp">
<shape android:shape="oval">
    <solid android:color="#FFFFFFFF" />
</shape>
</item>
<item android:id="@+id/pat2" android:top="3dp" android:left="3dp" android:right="3dp" android:bottom="3dp">
<shape android:shape="oval">
    <solid android:color="#FFFFFFFF" />
</shape>
</item>
<item android:id="@+id/pat3" android:top="6dp" android:left="6dp" android:right="6dp" android:bottom="6dp">
<shape android:shape="oval">
    <solid android:color="#FF27AE60" />
</shape>
</item>
</layer-list>


必须在较旧的API中使用
View.Invalidate()
。这可能是一个黑客攻击,但效果很好。

在API 16中,它仍然有效。