zoukankan      html  css  js  c++  java
  • Android GridView 通过seletor 设置状态和默认状态

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

    还有其他的原因吗?

  • 相关阅读:
    SQL Server 锁的 8 种类型
    MYSQL 提取时间中的信息的 4 方法
    MYSQL 时间计算的 3 种函数
    MYSQL 的 6 个返回时间日期函数
    SQL Server 错误18456
    MYSQL <=>运算符
    django比较相等或者不相等的模板语法ifequal / ifnotequal
    django模板语言的注释
    ECharts修改坐标轴,坐标轴字体,坐标轴网格样式以及控制坐标轴是否显示
    http://www.cnblogs.com/linxiyue/p/8244724.html
  • 原文地址:https://www.cnblogs.com/chenrui7/p/3682613.html
Copyright © 2011-2022 走看看