Selector在Android SDK 2.1和4.2.2上有不同的行为

时间:2014-01-16 17:46:33

标签: android xml selector

我有一个GridView的布局。

Gridview中的每个项目都是实现LinearLayout的{​​{1}}。

一切正常。但它只能在SDK 4.2.2中正确显示

SDK 4.2.2

enter image description here

SDK 2.1

enter image description here

不应显示黑色背景。

GridView代码

Checkable interface

GridView项目代码

<GridView
    android:id="@+id/gvBirds"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:verticalSpacing="4dp"
    android:layout_margin="32dp"
    android:scrollbars="vertical"           
    android:numColumns="auto_fit"
    android:listSelector="@color/transparent">
</GridView>  

选择代码

<?xml version="1.0" encoding="utf-8"?>
<pt.rogerioamaral.ByMAP.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridItemLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:background="@drawable/grid_item_selector">

    <TextView
        android:id="@+id/lbBirdName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="nome grande"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/main_gradient_end" 
        android:drawableTop="@drawable/falcao_small"
        android:background="@drawable/main_grid_background"
        android:layout_margin="5dp"/>

</pt.rogerioamaral.ByMAP.CheckableLinearLayout>  

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:state_pressed="true" android:state_checked="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/main_gradient_end"/>
            <corners android:radius="20dp"/>
        </shape>
    </item>
    <item android:state_checked="true">
        <shape android:shape="rectangle">
            <stroke android:color="@color/main_gradient_end"
                android:width="3dp"/>
            <corners android:radius="20dp"/>
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/main_gradient_end"/>
            <corners android:radius="20dp"/>
        </shape>
    </item>
    <item android:drawable="@color/transparent"/>
</selector>  

在两种情况下我都必须做同样的行为吗?

2 个答案:

答案 0 :(得分:2)

在GridView XML中:listSelector(int)实际上是所选项目。它没有错误,因为你的@ color / transparent是(int)0x00000000。

我很确定后台的差异是由于SDK之间默认背景颜色的变化造成的。

希望这两个变化能解决它。 (注意第一个是为了清晰起见)

<GridView
    android:id="@+id/gvBirds"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:verticalSpacing="4dp"
    android:layout_margin="32dp"
    android:scrollbars="vertical"           
    android:numColumns="auto_fit"
    android:listSelector="0"> <!-- selects the first item in the list, changed for clarity -->
</GridView> 



<item android:state_checked="true">
        <shape android:shape="rectangle">
            <stroke android:color="@color/main_gradient_end"
                android:background="@color/transparent"
                android:width="3dp"/> <!-- added to set background color to transparent -->
            <corners android:radius="20dp"/>
        </shape>
    </item>

答案 1 :(得分:1)

需要在<solid>

上添加color="@color/transparent" state_checked="true"属性
<item android:state_checked="true">
    <shape android:shape="rectangle">
        <solid android:color="@color/transparent"/>
        <stroke android:color="@color/main_gradient_end"
            android:width="3dp"/>
        <corners android:radius="20dp"/>
    </shape>
</item>