本文主要是介绍GridView,(GridView)ListView.setSelector(),ListView中Header/Footer的删除和添加/显示与隐藏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
> GridView
GridView.selector: GridView的设置根据Item选择状态改变背景状态
-- GridView横向滚动 Android:
a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件
b.GirdView外包裹LinearLayout是java代码中参数设置的必要条件
-- mGridView.setOnScrollListener(mNearByScroll);
AbsListView.OnScrollListener mNearByScroll = new AbsListView.OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// 一直在滚动中,多次触发 , 顺序: 3
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
// 手指触屏拉动准备滚动,只触发一次 , 顺序: 1
break;
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
// 持续滚动开始,只触发一次 , 顺序: 2
break;
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
// 整个滚动事件结束,只触发一次 , 顺序: 4
break;
default:
break;
}
}
};
> ListView.setSelector()
1.方法一:在listview中配置android:listSelector="@drawable/xxx"
或者在listview的item中添加属性android:background="@drawable/xxx"
2.方法二:Drawable drawable = getResources().getDrawable(R.drawable.xxx);
ListView.setSelector(drawable);但是这样会出现列表下拉有时候为黑的情况,
需要加上:android:cacheColorHint="@android:color/transparent"使其透明。
-- ListView设置点击背景效果,有三种方法可以来引用刚才创建的selector文件:
(1)在ListView中添加如下属性代码
android:listSelector="@drawable/mylist_view"
(2)在ListView的item界面中添加如下属性代码
android:background="@drawable/mylist_view"
(3)利用JAVA代码直接编写
Drawable drawable = getResources().getDrawable(R.drawable.mylist_view);
listView.setSelector(drawable);
Android中的Selector主要是用来改变ListView和Button控件的默认背景
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true"
android:drawable="@drawable/ic_mymenu_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/ic_mymenu_pressed" /> <!-- focused -->
<item android:drawable="@drawable/ic_mymenu" /> <!-- default -->
</selector>
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
<!-- 没有焦点时的背景图片 -->
<item android:state_window_focused="false"
android:drawable="@drawable/pic1" />
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->
<item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" />
<!-- 触摸模式下单击时的背景图片-->
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" />
<!--选中时的图片背景-->
<item android:state_selected="true" android:drawable="@drawable/pic4" />
<!--获得焦点时的图片背景-->
<item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>
-- ListView的getItemViewType();getItemViewType和getViewType方法;
Android之ListView的getItemViewType和getViewTypeCount- https://www.cnblogs.com/RGogoing/p/5872217.html
-- ListView getItemViewType与getViewTypeCount
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2- https://blog.csdn.net/ai_yong_jie/article/details/51502935
-- ListView中Header/Footer的删除和添加/显示与隐藏
ListView中Header、Footer View; listView.addHearderView(item_head); listView.setAdapter(adapter);
listview删除item刷新 ; listview ItemView设置GONE,仍占空间。layout.removeView(textView); ListView删除最后一个ItemView。
ListView中Header, Footer无法隐藏(gone)的问题- https://www.cnblogs.com/xgjblog/p/4554845.html
Android ListView的header footer设置visibility gone不起作用- https://www.cnblogs.com/zc9527/p/4591433.html
在Android开发中,在使用listView时,我们会经常用到footerView或者headerView,给ListView添加的footer和header好多时候,会根据情况隐藏和显示。
因为footer和header使用删除和添加的方法总感觉不好。而直接设置footer和header中的view为GONE时,虽然内容不显示了,但是这块区域还是会被占用。
经过各种方法测试,最后得出一个可以完美解决该问题的方法,如下代码:
this.footerLayout.setVisibility(View.GONE);
this.footerLayout.setPadding(0, -footerLayout.getHeight(), 0, 0); 意思就是把内容往上移动View的高度。
当然,在需要显示的时候,还要设置回来(做一个if else处理即可)
this.footerLayout.setVisibility(View.VISIBLE);
this.footerLayout.setPadding(0, 0, 0, 0);
解决ListView header和footer隐藏仍占用界面空间的问题- https://blog.csdn.net/hyhasd001/article/details/45532287
直接设置footer和header中的view为GONE时,虽然内容不显示了,但是这块区域还是会被占用。
在使用ListView的header和footer的过程中,如果需要动态的显示和隐藏header和footer的话,以前以为直接setVisibility中的View.GONE就可以。但是在实际使用中发现并不是这样的。直接设置GONE后,虽然元素是隐藏了,但是还是占用着那个区域。感觉就像View.INVISIBILE一样的效果了。后来在网上查找后发现。只要给footer再加上一个layout或者是父级的view就可以了。
mRootView.setVisibility(View.GONE);
// footerView显示与隐藏会影响焦点态,导致焦点丢失
mRootView.setPadding(0, -mRootView.getHeight(), 0, 0);
mRootView.setTop(-1);
mRootView.setVisibility(View.VISIBLE);
// footerView显示与隐藏会影响焦点态,导致焦点丢失
mRootView.setPadding(0, 0, 0, 0);
- 动态删除View Android
llContentView.addView(layout, iIndex)往某一位置添加子控件,通过llContentView.removeViewAt(iIndex)删除某一位置上的子控件。
if(mStack.size()>0){
mParentlayout.removeView(mStack.pop());
}
- ListView.setEmptyView(TipView)与notifyDataSetChanged()。
ListView之setEmptyView的问题
ListView.scrollListBy(-height);可能会发现在低版本上失效或者直接报错显示需要API19以上.
解决ListView的scrollListBy()方法不生效问题- https://www.jianshu.com/p/87ca7879b3c0
这篇关于GridView,(GridView)ListView.setSelector(),ListView中Header/Footer的删除和添加/显示与隐藏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!