zoukankan      html  css  js  c++  java
  • GridView 多行列表展示,item宽度设置无效的原因

      其实GridView的用法同listView用法一样,不过它可以较为简单的实现多列列表的展示。主要步骤就是设置数据,构建Adapter,再将Adapter设置给GridView。

    GirdView的一些常用属性:

    android:numColumns="auto_fit" --------列数设置为自动
    android:columnWidth="90dp",----------每列的宽度,也就是Item的宽度
    android:stretchMode="columnWidth"------缩放与列宽大小同步
    android:verticalSpacing="10dp"----------垂直边距
    android:horizontalSpacing="10dp"-------水平边距

    下面就给出一个较为简单的实现案例:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.lammy.gridviewdemo.MainActivity">
    
        <GridView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/grid_view"
            android:verticalSpacing="10dp"
            android:horizontalSpacing="10dp"
            android:numColumns="3"
            />
    </RelativeLayout>
    View Code

    主要是指定了GridView的列数,行列之间的间距等属性。

    每一个view的布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="match_parent">
    
        <ImageView
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:id="@+id/image"
            android:scaleType="fitXY"
            />
        <TextView
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/image"
            android:textAlignment="center"
            android:id="@+id/text"
            />
    </RelativeLayout>
    View Code

    最后是Activity,simpleAdapter的构建的最后2个参数顺序需要一致,否则会出错。

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ArrayList<Map<String , Object>>list = new ArrayList();
    
            int n=30;
            for(int i= 0 ; i< n ; i ++)
            {
                Map <String , Object>map  = new HashMap<String,Object>();
                map.put("image" , R.drawable.a7);//为了简单,将所有图弄一样
                map.put("number" , "Apple"+i);
                list.add(map);
            }
            String [] dataItem=new String[]{"image","number"};
            int []views = {R.id.image , R.id.text};
            SimpleAdapter adpter = new SimpleAdapter(this , list ,R.layout.adapter_item ,dataItem , views);
    
            GridView gridView = (GridView) findViewById(R.id.grid_view);
    
            gridView.setAdapter(adpter);
        }
    }
    View Code

     二、宽度无效

    之前在网上见到,设置无效,是因为在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;
        }
    View Code
  • 相关阅读:
    jQuery.Validate自定义规程的使用案例
    Jquery.Validate验证CheckBoxList,RadioButtonList,DropDownList是否选中
    asp.net(c#)有关 Session 操作的几个误区
    Selenium2+Python自动化-处理浏览器弹窗(转载)
    Selenium2+python自动化29-js处理多窗口【转载】
    Selenium2+python自动化26-js处理内嵌div滚动条【转载】
    Selenium2+python自动化24-js处理富文本(带iframe)【转载】
    Selenium2+python自动化25-js处理日历控件(修改readonly属性)【转载】
    Selenium2+python自动化17-JS处理滚动条【转载】
    Fiddler抓包11-HTTPS证书Actions无法导出问题【转载】
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/6063829.html
Copyright © 2011-2022 走看看