网格视图高亮选定项

5
我正在使用自定义背景来设置网格项,正常情况下它是有效的,但是当我单击任何一个网格项时(它不起作用)。
那么可能的原因是什么,在正常模式下可以工作,但在单击任何一个网格项时却无法工作。
对于ImageGallery,我正在使用这个教程,并使用这个来突出显示网格项。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/blue" android:state_pressed="true" />
    <item android:drawable="@color/blue" android:state_selected="true" />
    <item android:drawable="@color/blue" android:state_focused="true" />
    <item android:drawable="@color/white" />

</selector>

网格项布局xml:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/grid_background"
     android:descendantFocusability="blocksDescendants"
     android:padding="5dp">

    <ImageView
        android:id="@+id/grid_item_image"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:scaleType="centerCrop">
    </ImageView>

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="1dip" >

        <ProgressBar
            android:id="@+id/loading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:visibility="gone" />

    </FrameLayout>

</RelativeLayout>

这是主网格的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000">

    <!-- The GridView to display picture's preview  -->
    <GridView
        android:id="@+id/grid_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:numColumns="auto_fit"
        android:gravity="center"
        android:stretchMode="columnWidth"    
        android:drawSelectorOnTop="true"       
        android:focusable="true"
        android:clickable="true"
        android:scrollbars="none"
        > 
    </GridView>

</RelativeLayout>

我正常情况下看到的是这样的,即使我点击了GridView中的任意一个项目:

enter image description here


移除GridView中的背景并尝试在“android:listSelector”中使用选择器。 - Harin
2个回答

4

这可能会帮助你,将你的选择器设置为如下:

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

    <item android:drawable="@color/black" android:state_pressed="true" />
    <item android:drawable="@color/black" android:state_selected="true" />
    <item android:drawable="@color/black" android:state_focused="true" />
    <item android:drawable="@color/white" />

</selector>

和相对布局添加

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
      android:clickable="true"
     android:descendantFocusability="blocksDescendants" 
     android:background="@drawable/grid_background"
     android:padding="5dp">

    <ImageView
        android:id="@+id/grid_item_image"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:focusable="false"
        android:scaleType="centerCrop">
    </ImageView>

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:focusable="false"
        android:padding="1dip" >

        <ProgressBar
            android:focusable="false"
            android:id="@+id/loading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:visibility="gone" />

    </FrameLayout>

</RelativeLayout>

去除列表选择器的背景色。 - N J
将此行添加到相对布局中:android:descendantFocusability="blocksDescendants" - N J
你能试一下我的答案吗,@Oreo? - King of Masses
android:listSelector="@drawable/grid_selector"将此代码添加到您的GridView标签中。 - N J

2

为您的选择器编写可绘制文件,如下所示,请将其命名为selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/blue" />
        </shape>
    </item>

    <item android:state_pressed="false">
        <shape>
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</selector>

然后在gridview的xml中添加以下两行:

 android:drawSelectorOnTop="true"
 android:listSelector="@drawable/selector"

当手指从网格项上抬起时,颜色消失。 - Amar Ilindra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接