ListView Tips

  1. ScrollView 嵌套 ListView
    自定义可适应 ScrollView 的 ListView,重写其 onMeasure 方法。
    此方法默认显示的首项是 ListView,需要手动把 ScrollView 滚动至最顶端:scrollView.smoothScrollTo(0, 0);

    import android.content.Context;
    import android.util.AttributeSet;
    import android.widget.ListView;
    public class ListViewForScrollView extends ListView {
      public ListViewForScrollView(Context context) {
          super(context);
      }
      public ListViewForScrollView(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
      public ListViewForScrollView(Context context, AttributeSet attrs,
          int defStyle) {
          super(context, attrs, defStyle);
      }
      @Override
      /**
       * 重写该方法,达到使 ListView 适应 ScrollView 的效果
       */
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
          MeasureSpec.AT_MOST);
          super.onMeasure(widthMeasureSpec, expandSpec);
      }
    }

    参考:四种方案解决 ScrollView 嵌套 ListView 问题

  2. ListView 屏蔽 item 点击

    • 在 ListView 中设置:
    • 若 ListView 的 id 是使用系统默认的 id,则可以在实现此 ListView 的 Adapter 里重写 isEnabled() 方法:

      <ListView android:id="@android:id/list"
          android:layout_width="match_parent" 
          android:layout_height="match_parent"
          android:transcriptMode="alwaysScroll"
          android:layout_weight="1"
      />
      @Override    
      public boolean isEnabled(int position) {     
         return false;     
      }  
    • 若 ListView 的 id 是自定义的

      listview.setEnabled(false);

    参考: android 之 listview 的 item 不可点击

    以上方法会导致 ListVIew 无法滑动,只适用于在 ScrollView 中的 ListView。

    • 在 Adapter 中设置
        //表明 Adapter 中的所有 item 是否可以点击 
        @Override
        public boolean areAllItemsEnabled() {
            return false;
        }
        //表明下标为 position 的 item 不可选中,不可点击
        @Override
        public boolean isEnabled(int position) {
            return false;
        }

    参考: android 屏蔽 listview 的item事件

    • 屏蔽 HeaderView、FooterView 点击
      mListView.addHeaderView(headView ,null,false);  

    参考:如何让 listView 加入的 HeaderView 不可点击

  3. ListView 不显示分割线

    • 设置和取消每个 item 分隔线

      listView.setDivider(null);
      android:divider="@null";
      android:divider="@drawable/listview_horizon_line"
    • 隐藏头部分隔线
      Listview 分割线会在头部、数据 item 底部打印,如果要取消头部分割线必须
      先设置其方法

      addHeaderView(headView, null, true);
      addFooterView(footView, null, true);
      
      **注意:第三个参数必须为 true,否则无效**
      //显示头部出现分割线
      listview.setHeaderDividersEnabled(true);
      //禁止底部出现分割线 
      listview.setFooterDividersEnabled(false);

    参考:Android 技术之 ListView 分割线显示和隐藏

  4. 去除 item 点击背景色
    ListView 默认背景和系统窗口一样是透明的,如果给listview加上背景图片,或者背景颜色时,滚动时listview会黑掉,因为滚动时,列表里面的view重绘用的依旧是系统默认的透明色,颜色值为#FF191919。
    ListView xml中设置

    android:cacheColorHint="#00000000"
    android:listSelector="#00000000"
    

    参考:安卓listview的item点击时候的背景颜色怎么去掉或者设置成透明的呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值