其实GridView的用法同listView用法一样,不过它可以较为简单的实现多列列表的展示。主要步骤就是设置数据,构建Adapter,再将Adapter设置给GridView。
GirdView的一些常用属性:
android:numColumns="auto_fit" --------列数设置为自动
android:columnWidth="90dp",----------每列的宽度,也就是Item的宽度android:stretchMode="columnWidth"------缩放与列宽大小同步android:verticalSpacing="10dp"----------垂直边距android:horizontalSpacing="10dp"-------水平边距下面就给出一个较为简单的实现案例:
主要是指定了GridView的列数,行列之间的间距等属性。
每一个view的布局文件
最后是Activity,simpleAdapter的构建的最后2个参数顺序需要一致,否则会出错。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList
二、宽度无效
之前在网上见到,设置无效,是因为在inflate的时候parent置为空导致的顶层布局没有加载。而下面代码中,若只是新建一个textview,会发现设置宽高也无效,最终通过布局属性设置才生效,证明getview中返回的view必须含有布局属性,否则它的大小设置都无效。
public View getView(int position, View convertView, ViewGroup parent) { //用button 会和gridview抢占监听事件,导致无法监听到gridview 的item点击事件 // Button button = new Button(mContext); TextView textView = new TextView(mContext);// textView.setWidth(50);// textView.setHeight(40); textView.setGravity(Gravity.CENTER); textView.setBackgroundColor(0Xffffff00); textView.setText(functions[position]); //不添加下面中的一个布局,则会发现textView 无论怎么设置宽高都无效// textView.setLayoutParams(new GridView.LayoutParams(200,160)); textView.setLayoutParams(new RelativeLayout.LayoutParams(200,120)); return textView; }