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() 之前已经触发。

还有其他的原因吗?

更多相关文章

  1. mac Android(安卓)studio3.2版本安装+环境搭建
  2. LinearLayout 内部 挂件 居中
  3. Android——新手指引 指定View高光显示自定义控件
  4. 2010 Linux Journal读者选择奖揭晓
  5. AndroidManifest.xml的Service元素 android:process设置
  6. android开发环境搭建和部署
  7. android创建桌面快捷方式(启动目标非项目的启动页)
  8. Android(安卓)Selector Shape使用详解
  9. Android之背景图片设置为重复而不是默认的拉伸

随机推荐

  1. 使用eclipse创建android工程时得到警告
  2. android:shape的使用
  3. android 简单的上拉加载实现
  4. Android(安卓)Studio打包Signed APK 碰到
  5. [Android] 无法创建项目问题解决
  6. WebView显示网页
  7. Android(安卓)系统搜索框(有浏览记录)
  8. Android图片压缩及内存缓存
  9. android 开发中判断网络是否连接的代码
  10. 客户端性能测试