首页 技术 正文
技术 2022年11月8日
0 收藏 754 点赞 1,291 浏览 2524 个字

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

还有其他的原因吗?

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,910
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,435
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,250
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,061
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,693
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,731