Android基础UI之ListView
16lz
2021-01-23
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个itemlistview.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--ListView 分割线
- android分割线
- shape画listview分割线
- C#如何绘制PDF嵌套表格?绘制PDF嵌套表格的步骤
- 如何从Perl中的目录中分辨文件
- 在嵌套使用if语句时,C语言规定else总是什么?
- golang接口可以嵌套吗
- 骚操作!嵌套 JSON 秒变 Dataframe!
- 详细解说三种PHP嵌套HTML的写法