GridView的使用与跑马灯效果

本文介绍了Android中GridView的使用,包括在布局文件中创建控件、设置Item样式以及编写Activity代码实现动态展示。同时,详细讲解了如何通过设置特定属性实现跑马灯效果,包括聚焦和省略属性的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 GridView的使用

        gridView和ListView一样都是一种列表显示的视图控件,ListView是竖直列表的形式来展现,常常用于新闻条目这种.而gridView是可以按照多少列来横向列表的形式来展现的.两者的使用十分相似.

      1.创建GridView的控件

            在你的布局文件中创建gridView控件如下:

             

<GridView
            android:id="@+id/gv_home"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:numColumns="3"
            android:verticalSpacing="20dp"
             >
 

    </GridView>

  这里指定每列显示3个,同时使用权重来设置高度布局,设置layout_height为0dp来提高性能,verticalSpacing设置竖直间距20dp

 2.Item的样式

    创建gridView内部的每个Item的样式了,新建一个自定义的样式文件home_list_item.xml,写入item的布局,如下

    

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:gravity="center"
>


    <ImageView
            android:id="@+id/iv_item"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/home_apps"

    />

    <TextView
            android:id="@+id/tv_item"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000"
            android:layout_marginTop="5dp"
            android:text="手机防盗"
    />

</LinearLayout>

一张图片和一个文字说明,标识一个功能Item的样式LinearLayout 中的android:gravity="center"是为了让item能居中显示

 

 3.编写Activity代码

  我们需要让Item样式动态展示到安卓设备上,需要写代码逻辑来实现,如下:

  

 private String mItems[]= new String[]{"手机防盗", "通讯卫士", "软件管理", "进程管理",
            "流量统计", "手机杀毒", "缓存清理", "高级工具", "设置中心"};
    private int mPics[] = new int[]{ R.mipmap.home_safe,
            R.mipmap.home_callmsgsafe, R.mipmap.home_apps,
            R.mipmap.home_taskmanager, R.mipmap.home_netmanager,
            R.mipmap.home_trojan, R.mipmap.home_sysoptimize,
            R.mipmap.home_tools, R.mipmap.home_settings};



 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        gvHome = findViewById(R.id.gv_home);
        gvHome.setAdapter(new HomeAdapter());
    }


 class HomeAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return mItems.length;
        }

        @Override
        public Object getItem(int position) {
            return mItems[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
           View view =  View.inflate(HomeActivity.this,R.layout.home_list_item,null);
            ImageView iv_item = view.findViewById(R.id.iv_item);
            TextView tv_item = view.findViewById(R.id.tv_item);
            iv_item.setImageResource(mPics[position]);
            tv_item.setText(mItems[position]);


            return view;
        }
    }

mItems和mPics标识的是动态展示到设备上的文字和图片,在onCreate方法中,我们创建了HomeAdapter用来填充样式,其中以mItems作为实例,getCount获取mItems总数,getItem和getItemId分别标识当前position的Item和ItemId.重要的是getView,我们在该方法中给每个iv_item和tv_item附上对应的值,因为我们有九个item,所以该方法会调用九次.至此,我们了解了gridVIew的使用.

二.跑马灯的效果

      完成改功能需要singline和ellipsize两个属性,但是仅仅这两个属性还不行,我们需要他能获取焦点,代码如下:

     

<TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:text="手机卫士太NB了,手机卫士太NB了,手机卫士太NB了,手机卫士太NB了,"
            android:singleLine="true"
            android:ellipsize="marquee"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:textColor="#000"
            android:textSize="18sp"

    />

 除了刚刚说的两个参数,还有android:focusable="true",android:focusableInTouchMode="true"这两个要设置为true,当然你可以自定义View,在代码里面保证你的focus始终为true.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值