在GridView中更改元素OnItemClick的颜色

时间:2013-10-03 12:56:21

标签: android gridview

我在我的应用程序中使用ListViews和GridView。我已经为GridView使用了自定义适配器,但没有为列表使用。

enter image description here

如您所见,当我点击它时,它会自动更改元素的背景。但是在GridView中并没有发生同样的事情。我必须手动完成吗?我想为用户,典型的边界或类似的东西提供一些反馈。我也上传了gridview截图。

enter image description here

GridView XML。

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="100dp"
android:drawSelectorOnTop="true"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" >

现在GridView适配器的getView()部分:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View layout=convertView;
    ViewHolder holder = null;
    GridCrop gridElement;

    if (layout == null) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        layout=inflater.inflate(R.layout.crop_grid_element,null);
        holder = new ViewHolder();
        holder.image = (ImageView) layout.findViewById(R.id.cropImage);
        holder.text = (TextView) layout.findViewById(R.id.imageTitle);
        layout.setTag(holder);
    } else {
        holder = (ViewHolder) layout.getTag();
    }

    gridElement=list.get(position);
    holder.image.setImageResource(gridElement.getImage());
    holder.text.setText(gridElement.getTitle());
    return layout;
}

class ViewHolder {
    ImageView image;
    TextView text;
}

4 个答案:

答案 0 :(得分:2)

尝试在GridView上使用grid.setDrawSelectorOnTop(true);,您当前的选择器可能是在适配器的非透明视图下绘制的。

答案 1 :(得分:1)

GridView XML。

中添加此行
android:listSelector="#00343434"

答案 2 :(得分:0)

实际上,您必须直接在单元格主布局的背景中使用选择器:

示例:

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

    <item android:drawable="@color/clr_main_green_pressed" android:state_selected="true" android:state_window_focused="false"/>
    <item android:drawable="@color/clr_main_green_pressed" android:state_selected="true"/>
    <item android:drawable="@color/clr_main_green_pressed" android:state_pressed="true" android:state_selected="false"/>
    <item android:drawable="@android:color/transparent" android:state_selected="false"/>

</selector>

答案 3 :(得分:0)

我已经在stackoverflow中读到了XML中的listSelector属性...我试了但是没有用......直到我尝试了另一种颜色。所以答案是在xml中添加GridView:

android:listSelector =“@ color / Aqua”或其他什么。

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="100dp"
android:drawSelectorOnTop="true"
android:gravity="center"
android:horizontalSpacing="10dp"
android:listSelector="@color/Aqua"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" >