Android基础UI之ListView

1 常用属性

1.1 设置按下时背景透明

android:listSelector="@android:color/transparent"

1.2 取消滚动条

android:scrollbars="none"

1.3 ListView中分割线的设置

1.3.1 设置分割线

(1) 在布局文件中ListView元素中通过属性设置

android:divider="#fffff"  分割线颜色  
android:dividerHeight="10px"  分割线高度

(2) 使用XML文件设置

<!-- res/drawable/liner.xml -> 
<?xmlversionxmlversion="1.0"encoding="utf-8"?>  
<layer-list   xmlns:android="http://schemas.android.com/apk/res/android">  
 <item>  
   <shape>  
      <gradient  
         android:startColor="#000000"  
         android:centerColor="#CCCCCC"  
         android:endColor="#FFFFFF"  
         android:height="1px"  
         android:angle="0"/>  
  </shape>  
 </item>  
</layer-list> 

1.3.2 取消分割线

android:divider="@null" //最常用方法

android:divider="#00000000"

lv.setDividerHeight(0) //高度设为0

1.4 设置ListView需要显示在第几项

listView.setSelection(N);//N是需要显示的第N个Item

//使用以下代码实现平滑移动
listview.smoothScrollBy(moveInstance, duration);
listview.smoothScrollByOffset(offset);//滚动offset个item
listview.smoothScrollToPosition(index);//跳转到index位置

1.5 遍历ListView中的所有Item

for(int i = 0; listView.getChildCount(); i++) { View view = listView.getChildAt(i); }

2 处理ListView为空的情况

ListView和其他继承自AdapterView的类可以使用setEmptyView(View view)方法设置空状态下的显示。当绘制AdapterView的适配器为空或者isEmpty

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">

    <ListView  android:id="@+id/empty_listview_lv" android:layout_width="match_parent" android:layout_height="match_parent" />
    <ImageView  android:id="@+id/empty_imageview_iv" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/bg" android:visibility="gone"/>
</FrameLayout>

在ListView下显示一个ImageView,注意我在测试的时候发现ImageView一定设置Android:visibility=”gone”否则不管ListView的适配器是否为空都会显示。

 public class EmptyListViewActivity extends Activity {


        private ListView empty_listview_lv;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.empty_listview_layout);
            empty_listview_lv = (ListView) findViewById(R.id.empty_listview_lv);
            String[] mListStr = {"1","2","3","3","4"};
            empty_listview_lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mListStr));
            empty_listview_lv.setEmptyView(findViewById(R.id.empty_imageview_iv));
        }
    }

这样当我们的数据为空的时候可以设置

empty_listview_lv.setAdapter(null);

这样就会显示ImageView(注:不需要把ImageView的visibility设置为可见);

3 怎么判断listview滚动条是滚动到顶部还是底部

/** * OnScrollListener 监听 */
lv.setOnScrollListener(new OnScrollListener() { 
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        switch (scrollState) {
            // 当不滚动时
            case OnScrollListener.SCROLL_STATE_IDLE:
                // 判断滚动到底部
                if (lv.getLastVisiblePosition() == (lv.getCount() - 1)) {

                }
                // 判断滚动到顶部
                if(lv.getFirstVisiblePosition() == 0{

                }
                break;

            //滚动状态
            case OnScrollListener.SCROLL_STATE_FLING:
                break;

            //触摸后滚动
            case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                break;
        } 
} 

    /** * 正在滚动 * firstVisibleItem第一个Item的位置 * visibleItemCount 可见的Item的数量 * totalItemCount item的总数 */
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) { 

    }
});

/**
* OnTouchListener 监听
*/
listView.setOnTouchListener(new View.OnTouchListener()) {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_MOVE:
                //接触到ListView移动时
                break;

            case MotionEvent.ACTION_UP:
                //离开ListView时
                break;

            case MotionEvent.ACTION_DOWN:
                //接触到ListView时
                break;
        }

        return false;
    }
});

4 ScrollView嵌套ListView滑动冲突,与显示不全解决方法

/** * 重写ListView * @author guan * 2016-3-30 */  
public class UserListView extends ListView {  
    public UserListView(Context context) {  
        super(context);  
}  

public UserListView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
}  

public UserListView(Context context, AttributeSet attrs, int defStyle) {  
        super(context, attrs, defStyle);  
}  

@Override  
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
                        MeasureSpec.AT_MOST);  
        super.onMeasure(widthMeasureSpec, expandSpec);  
    }  
}  

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

你可能感兴趣的:(android)