Android中可以通过selector控制GridView Item 的状态,而省去使用代码控制

GridView View Selector Xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 选择状态 -->
<item android:drawable="@drawable/btn_big_normal_selected" android:state_selected="true" /> <!-- 默认状态 -->
<item android:drawable="@drawable/btn_big_normal_disable"/> </selector>

GridView布局文件(这里的GridView是一个自定义的GridView,可以不用理会)

注意:不要在这里设置selector 【android:listSelector="@drawable/xxx"】

  <com.yixin.nfyh.cloud.widget.GridView
android:id="@+id/gv_setting_devices"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:cacheColorHint="@null"
android:columnWidth="60dp"
android:gravity="center"
android:horizontalSpacing="5dp"
android:numColumns="2"
android:stretchMode="columnWidth"
android:verticalSpacing="5dp" > </com.yixin.nfyh.cloud.widget.GridView>

这里有几个地方是需要注意的:

android:cacheColorHint="@null" -- 屏蔽点击的时候出现黑色的情况,也可以使用透明颜色@android:color/transparent
android:columnWidth="60dp"     -- 每列宽度,需要设置 android:stretchMode="columnWidth" 
android:verticalSpacing="5dp"  -- 每列的垂直间隙
android:horizontalSpacing="5dp"-- 每列的水平间隙 
 

GridView Item 布局

<?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="wrap_content"
android:gravity="center"
android:background="@drawable/btn_big_select"
android:orientation="vertical"
android:padding="30dp" > <ImageView
android:id="@+id/img_view_device_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <TextView
android:id="@+id/tv_view_device_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>

这里一定要注意的地方,就是背景:

android:background="@drawable/btn_big_select"   -- 这里设置Selector,网上很多都是在GridView中设置,为什么不再GridView的设置呢?因为默认背景没有显示(求高手指导)。

最重要的是在Adapter中设置
gridview.requestFocusFromTouch(); //获取焦点
gridview.setSelection(position); //设置选择状态  
@Override
public View getView(int position, View convertView, ViewGroup parent)
{ if (convertView == null)
{
convertView = getLayoutInflater().inflate(
R.layout.view_device_item, null); } // 是否为默认选中项
if (isDefalutSelection())
{
gridview.requestFocusFromTouch(); //获取焦点
gridview.setSelection(position); //设置选择状态 } return convertView;
}
 
点击的时候可以更改为选择状态
    @Override
public void onItemClick(AdapterView<?> adapter, View v, int position,
long arg3)
{ v.setSelected(true);
}

 

 总结

在adapter getView() 中设置 v.setSelected(true); 不起作用,而在点击的时候设置就有用?而一定要通过

gridview.setSelection(position);

这个是为啥?

我认为是当adapter初始化View之前已经设置select position ,通过onItemSelect 可以看到select 在 getView() 之前已经触发。

还有其他的原因吗?

Android GridView 通过seletor 设置状态和默认状态的更多相关文章

  1. Android GridView 滑动条设置一直显示状态

    模拟GridView控件: <GridView android:id="@+id/picture_grid" android:layout_width="match ...

  2. Android eclipse 运行项目设置程序默认安装到SD卡

    Android eclipse 运行项目设置程序默认安装到SD卡  1.在Android手机启用USB调试功能 2.在Windows系统中打开命令提示符(开始菜单,选择运行,输入cmd回车即可),使用 ...

  3. Android GridView LruCache

    照片墙这种功能现在应该算是挺常见了,在很多应用中你都可以经常看到照片墙的身影.它的设计思路其实也非常简单,用一个GridView控件当作“墙”,然后随着GridView的滚动将一张张照片贴在“墙”上, ...

  4. Android studio 的初始设置

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. Android 之 权限 uses-permission 设置

    Manifest.permission 官方API说明: http://developer.android.com/reference/android/Manifest.permission.html ...

  6. Android GridView 添加 网格线解决办法

    在使用 GridView 网格布局时,默认情况下 GridView  是没有网格线的,但是有些时候我们需要让GridView显示分割线,怎么办呢?查了不少资料,找到了一种为GridView添加网格线的 ...

  7. Android 如何修改自动同步数据的默认开关 M

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  8. Android GridView异步加载图片和加载大量图片时出现Out Of Memory问题

    我们在使用GridView或者ListView时,通常会遇到两个棘手的问题: 1.每个Item获取的数据所用的时间太长会导致程序长时间黑屏,更甚会导致程序ANR,也就是Application No R ...

  9. Android中获取并设置屏幕亮度

    最近在做一个Demo的时候用到了调节屏幕亮度的功能,于是上网搜索了一下,并且写了一个小Demo测试了一下,发现代码还是比较简单的.Android中的亮度调节,主要有三个方向,一个是针对于系统的亮度调节 ...

随机推荐

  1. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  2. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  3. 3.Windows Server 2012 R2数据库部署

    很多人竟然不会安装数据库....好吧,来个图文教程,其实和windows里面一样安装,和安装2008一样的 先安装3.5:http://www.cnblogs.com/dunitian/p/53487 ...

  4. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  5. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  6. org.jboss.deployment.DeploymentException: Trying to install an already registered mbean: jboss.jca:service=LocalTxCM,name=egmasDS

    17:34:37,235 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-8080 17:34:37,281 INFO [ ...

  7. Android之SQLite数据存储

    一.SQLite保存数据介绍 将数据库保存在数据库对于重复或者结构化数据(比如契约信息)而言是理想之选.SQL数据库的主要原则之一是架构:数据库如何组织正式声明.架构体现于用于创建数据库的SQL语句. ...

  8. atitit.attilax的软件 架构 理念.docx

    atitit.attilax的软件 架构 理念.docx 1. 预先规划.1 2. 全体系化1 3. 跨平台2 4. 跨语言2 5. Dsl化2 5.1. 界面ui h5化2 6. 跨架构化2 7. ...

  9. Linux基础介绍【第八篇】

    Linux网络基础 网线 568A 568B 线序:橙白橙 绿白蓝 蓝白绿 棕白棕 交换机.路由器 交换机:DLINK.H3C.CISCO 交换机(Switch)是一种用于电信号转发的网络设备.它可以 ...

  10. C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解  ...