GridView使用详解 仿桌面

这篇文章是看慕课网视频的笔记,包括图片素材均来自于慕课网,但实际代码是自己手敲.附上视频路径,若有侵权,请留言.

Android攻城狮的第二门课(第1季)

附上图片素材:
联系人日历相机时钟游戏短信铃声设置通讯录天气浏览器视频

附上项目效果图:

这里写图片描述

当你点了日历应用的时候 , 会跳转到日历:

这里写图片描述

详细参考代码如下,
第一步:
在activity_main.xml文件拖一个GridView控件,去掉父容器的内边距.

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

    <!--
     android:numColumns="4" 表示GridView每一行显示4个Item(图标)
     android:horizontalSpacing="20dp" 表示每一行Item之间的间距
     android:verticalSpacing="20dp"  表示每一列Item之间的间距
     -->

    <GridView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numColumns="4"
        android:horizontalSpacing="20dp"
        android:verticalSpacing="20dp"
        android:id="@+id/grid"></GridView>

</LinearLayout>

第二步:
新建一个布局文件,取名为Item.xml, 作为GridView每一项Item的参照样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/img"
        android:src="@mipmap/camera"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txt"
        android:textColor="#ffff"
        android:layout_marginTop="5dp"
        android:text="文字"/>
</LinearLayout>

Item.xml效果截图如下:
这里写图片描述

第三步:
新建一个Activity.取名为CalendarActivity,作为日历应用的显示界面.并在activity_calendar.xml中拖一个CalendarView控件.去掉父容器内边距,把CalendarView的宽设为”match_parent “,高设为固定值,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_calendar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="myself.myapplication.CalendarActivity">

    <CalendarView
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="12dp"
        android:id="@+id/calendarView" />
</RelativeLayout>

第四步:
编写MainActivity.java,参考代码如下:

package myself.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{
    private GridView gridView;
    private List<Map<String,Object>>dataList;
    private SimpleAdapter simpleAdapter;
    private int[] icons = {R.mipmap.address_book, R.mipmap.calendar,
            R.mipmap.camera, R.mipmap.clock, R.mipmap.games_control,
            R.mipmap.messenger, R.mipmap.ringtone, R.mipmap.settings,
            R.mipmap.speech_balloon, R.mipmap.weather,
            R.mipmap.world, R.mipmap.youtube};
    private String[] iconName = {"联系人", "日历", "照相机", "时钟", "游戏", "短信", "铃声", "设置",
            "语音", "天气", "浏览器", "Youtube"};

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        gridView = (GridView) findViewById(R.id.grid);
        dataList = new ArrayList<>();
        simpleAdapter = new SimpleAdapter(MainActivity.this, getDate(), R.layout.item, new String[]{"img", "text"}, new int[]{R.id.img, R.id.txt});
        gridView.setAdapter(simpleAdapter);
        gridView.setOnItemClickListener(this);
    }

    private List<Map<String,Object>> getDate() {
        /**
         *外层for循环其实没有必要,只是为了更贴近实际情况
         * 复制了三次数据源, 如果你不是点击第一轮图标应用,项目会报错
         * 往下看,
         *因为onItemClick()这个方法传递的position参数跟数组的下标是对应的
         * 而我的数组长度为12, 也就是桌面只有12个应用你可以正常使用,但实际现在
         * 我的桌面是有36个应用图标
         */
        for (int k = 0; k < 3; k++) {
            for (int i = 0; i < icons.length; i++) {
                Map<String, Object> map = new HashMap<>();
                map.put("img", icons[i]);
                map.put("text", iconName[i]);
                dataList.add(map);
            }
        }
        return dataList;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //这一行代码验证了,position和数组的下标是吻合的
        Toast.makeText(MainActivity.this,"我是"+iconName[position],Toast.LENGTH_LONG ).show();

        switch (position){
            case 0:

                break;
            case 1:
                //匹配position,当点击第二个图标(日历的时候,跳转到CalendarActivity)
                Intent intent = new Intent(MainActivity.this, CalendarActivity.class);
                startActivity(intent);
            break;
        }
    }
}

实现顺序不一定非得按照这个步骤来,保持大脑清醒,知道自己这一步要做什么,下一步要做什么,还缺什么.是实现任何项目效果的前提.编程不是照搬照抄,虽然我们一直说:站在巨人的肩上写代码.但是我们得有自己的思考问题方式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值