Android的GridView和ScrollView的嵌套
16lz
2021-01-24
来源于回答频道答题,因此内容都是基于回答频道的原题布局进行
1、布局文件如下
文件名:testxm.xml
<?xml version="1.0" encoding="utf-8"?>
2、gridview的item布局文件
<?xml version="1.0" encoding="utf-8"?>
3、activity代码
public class PorterDuffActivity extends Activity{private PorterCanvas mPorterCanvas = null;private GridView gridView;private LinearLayout ll;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.testxm);this.addview();}private void addview(){ for(int i=1; i<=35;i++){ ll=(LinearLayout) findViewById(R.id.fujin_btnlist_tl); this.addTwoClassify(i); }}private void makeGridView(int num){ArrayList> lstImageItem = new ArrayList>(); for(int i=0;i<10;i++) { HashMap map = new HashMap(); map.put("ItemText", num+"NO."+String.valueOf(i));//按序号做ItemText lstImageItem.add(map); } //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应 SimpleAdapter saImageItems = new SimpleAdapter(this, //没什么解释 lstImageItem,//数据来源 R.layout.gridview_item,//night_item的XML实现 //动态数组与ImageItem对应的子项 new String[] {"ItemText"}, //ImageItem的XML文件里面的一个ImageView,两个TextView ID new int[] {R.id.ItemText}); //添加并且显示 gridView.setAdapter(saImageItems); }private void addTwoClassify(int i){ gridView=new MyGridView(PorterDuffActivity.this);//注意这里使用的是MyGridView,如果使用GridView的话,只会显示一行多一点,第二行显示不完全,使用MyGridView的话,能够完全显示出来。commend by danielinbiti gridView.setVerticalSpacing(10); gridView.setHorizontalSpacing(15); gridView.setNumColumns(3); this.makeGridView(i); LinearLayout ll_two=new LinearLayout(PorterDuffActivity.this); ll_two.setPadding(10, 0, 0, 0); ll_two.addView(gridView, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); ll.addView(ll_two, new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); }}
4、MyGridView代码
public class MyGridView extends GridView{ private boolean needScrollBar = false; //设置是否有ScrollBar,当要在ScollView中显示时,应当设置为false。 否则为 true public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (!needScrollBar) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } }
总结:
因为ScrollView和GridView有布局上的冲突,如果外层嵌套了ScrollView,则GridView如果不是指定固定高度,则无法显示完全。ListView也有该问题。
但其实针对这到题来说,我觉得使用LinearLayout等分方式的布局也是可以的,垂直布局往下添加就可以了,这样避免了与ScrollView的冲突。但主要因为GridView是封装好的组件,所以使用了GridView能够简化一部分工作,但也增加了布局刷新的负担(虽然一般可以不考虑)
更多相关文章
- android 设置textview跑马灯效果
- Android(安卓)- Gradle项目构建依赖
- Android(安卓)学习之入门helloWorld
- android平台手电筒开发源代码
- eclipse安装sdk后出现的错误
- Android画图demo
- Android系统编译过程中常见问题汇总(1)
- Native registration unable to find class 'com/android/server
- Android(安卓)SDK无法更新问题