来源于回答频道答题,因此内容都是基于回答频道的原题布局进行

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能够简化一部分工作,但也增加了布局刷新的负担(虽然一般可以不考虑)

更多相关文章

  1. android 设置textview跑马灯效果
  2. Android(安卓)- Gradle项目构建依赖
  3. Android(安卓)学习之入门helloWorld
  4. android平台手电筒开发源代码
  5. eclipse安装sdk后出现的错误
  6. Android画图demo
  7. Android系统编译过程中常见问题汇总(1)
  8. Native registration unable to find class 'com/android/server
  9. Android(安卓)SDK无法更新问题

随机推荐

  1. .Net 转战 Android(安卓)4.4 日常笔记(5)--
  2. 最牛逼android上的图表库MpChart(三) 条形
  3. 如何一个android工程作为另外一个android
  4. Android(安卓)Socket 发送广播包的那些坑
  5. android利用JNI调用C++自定义类
  6. Android(安卓)SDK版本和ADT版本
  7. 【gravity】android:layout_gravity 和 a
  8. android系统体系结构
  9. Android(安卓)的网络编程
  10. Android(安卓)下使用 JSON 实现 HTTP 请