Android GridView 模块分类

一 前言

东西很简单,就是一个 GridView 实现主页面的功能模块分类,减少xml的层级嵌套

二、使用步骤

 首先创建主页xml布局文件,其中 numColumns 属性是设置列数,verticalSpacing 属性为行间距,horizontalSpacing 为列间距,

<LinearLayout 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:orientation="vertical">

    <include layout="@layout/actionbar_layout" />

    <GridView
        android:id="@+id/gridView_menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="10dp"
        android:horizontalSpacing="10dp"
        android:numColumns="2"
        android:verticalSpacing="10dp" />

</LinearLayout>

然后回到主页,创建一个名为 gridItemArrayLis 的t动态数组,包含一个 HashMap ,其键为String,值为Object ,用以 GridView 的item的数据加载,再创建一个HashMap 用来自定义item的功能模块展示,

 private ArrayList<HashMap<String, Object>> gridItemArrayList;

 private HashMap<String, Object> hashMap;

接下来就是数据的添加,初始化 gridItemArrayList ,然后一次创建四个 hashMap 用以存入item的功能模块分类展示,然后依次 add 到 gridItemArrayList  当中,加载适配器展示

        gridItemArrayList = new ArrayList<HashMap<String, Object>>();

        hashMap = new HashMap<String, Object>();
        hashMap.put("text", "串口");
        Object image = R.mipmap.ic_rk;
        hashMap.put("image", image);
        Object textImage = R.drawable.shape_1;
        hashMap.put("textImage", textImage);
        Object layoutBg = R.drawable.shape_5;
        hashMap.put("layoutBg", layoutBg);
        gridItemArrayList.add(hashMap);

        hashMap = new HashMap<String, Object>();
        hashMap.put("text", "UI");
        image = R.mipmap.ic_ck;
        hashMap.put("image", image);
        textImage = R.drawable.shape_2;
        hashMap.put("textImage", textImage);
        layoutBg = R.drawable.shape_6;
        hashMap.put("layoutBg", layoutBg);
        gridItemArrayList.add(hashMap);

        hashMap = new HashMap<String, Object>();
        hashMap.put("text", "实验");
        image = R.mipmap.ic_yd;
        hashMap.put("image", image);
        textImage = R.drawable.shape_3;
        hashMap.put("textImage", textImage);
        layoutBg = R.drawable.shape_7;
        hashMap.put("layoutBg", layoutBg);
        gridItemArrayList.add(hashMap);

        hashMap = new HashMap<String, Object>();
        hashMap.put("text", "测试");
        image = R.mipmap.ic_pd;
        hashMap.put("image", image);
        textImage = R.drawable.shape_4;
        hashMap.put("textImage", textImage);
        layoutBg = R.drawable.shape_8;
        hashMap.put("layoutBg", layoutBg);
        gridItemArrayList.add(hashMap);

        gridAdapter = new GridViewAdapter(gridItemArrayList, MenuActivity.this);
        gridView.setAdapter(gridAdapter);

最后就是在适配当中设置数据,

 HashMap<String, Object> hashMap = (HashMap<String, Object>) getItem(position);

 holder.item_Image.setImageResource((Integer) hashMap.get("image"));
 holder.item_Text.setText((CharSequence) hashMap.get("text"));
 holder.item_TextBg.setBackgroundResource((Integer) hashMap.get("textImage"));
 holder.item_layoutBg.setBackgroundResource((Integer) hashMap.get("layoutBg"));

结尾贴一下完整代码

public class MenuActivity extends BaseActivity {

    private GridView gridView;
    private GridViewAdapter gridAdapter;
    private ArrayList<HashMap<String, Object>> gridItemArrayList;
    private TextView actionTv;
    private HashMap<String, Object> hashMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        initView();
        setTitleText("摸索");
    }

    protected void initView() {
        gridView = findViewById(R.id.gridView_menu);
        actionTv = findViewById(R.id.action_tv);

        gridItemArrayList = new ArrayList<HashMap<String, Object>>();

        hashMap = new HashMap<String, Object>();
        hashMap.put("text", "串口");
        Object image = R.mipmap.ic_rk;
        hashMap.put("image", image);
        Object textImage = R.drawable.shape_1;
        hashMap.put("textImage", textImage);
        Object layoutBg = R.drawable.shape_5;
        hashMap.put("layoutBg", layoutBg);
        gridItemArrayList.add(hashMap);

        hashMap = new HashMap<String, Object>();
        hashMap.put("text", "UI");
        image = R.mipmap.ic_ck;
        hashMap.put("image", image);
        textImage = R.drawable.shape_2;
        hashMap.put("textImage", textImage);
        layoutBg = R.drawable.shape_6;
        hashMap.put("layoutBg", layoutBg);
        gridItemArrayList.add(hashMap);

        hashMap = new HashMap<String, Object>();
        hashMap.put("text", "实验");
        image = R.mipmap.ic_yd;
        hashMap.put("image", image);
        textImage = R.drawable.shape_3;
        hashMap.put("textImage", textImage);
        layoutBg = R.drawable.shape_7;
        hashMap.put("layoutBg", layoutBg);
        gridItemArrayList.add(hashMap);

        hashMap = new HashMap<String, Object>();
        hashMap.put("text", "测试");
        image = R.mipmap.ic_pd;
        hashMap.put("image", image);
        textImage = R.drawable.shape_4;
        hashMap.put("textImage", textImage);
        layoutBg = R.drawable.shape_8;
        hashMap.put("layoutBg", layoutBg);
        gridItemArrayList.add(hashMap);

        gridAdapter = new GridViewAdapter(gridItemArrayList, MenuActivity.this);
        gridView.setAdapter(gridAdapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                gridAdapter.setSelection(position);
                gridAdapter.notifyDataSetChanged();
            }
        });
    }

    class GridViewAdapter extends BaseAdapter {
        private ArrayList<HashMap<String, Object>> itemArrayList;
        private Context context;

        private int selectItem = -1;

        public GridViewAdapter(ArrayList<HashMap<String, Object>> itemArrayList, Context context) {
            this.itemArrayList = itemArrayList;
            this.context = context;
        }

        public void setSelection(int position) {
            selectItem = position;
        }

        @Override
        public int getCount() {
            if (null == itemArrayList) {
                return 0;
            } else {
                return itemArrayList.size();
            }
        }

        @Override
        public Object getItem(int position) {
            return itemArrayList.get(position);
        }

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

        @SuppressWarnings("unchecked")
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.menu_gridview_layout, parent, false);
                holder = new ViewHolder();
                holder.item_Image = convertView.findViewById(R.id.imageView);
                holder.item_Text = convertView.findViewById(R.id.textView);
                holder.item_TextBg = convertView.findViewById(R.id.text_bg);
                holder.item_layoutBg = convertView.findViewById(R.id.layout_bg);
                convertView.setTag(holder);

                convertView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String title = holder.item_Text.getText().toString();
                        if (title.contains("串口")) {
                            Intent intent = new Intent(MenuActivity.this, MainActivity.class);
                            startActivity(intent);
                        } else if (title.contains("UI")) {
                            Intent intent = new Intent(MenuActivity.this, MainActivity.class);
                            startActivity(intent);
                        } else if (title.contains("实验")) {
                            Intent intent = new Intent(MenuActivity.this, MainActivity.class);
                            startActivity(intent);
                        } else if (title.contains("测试")) {
                            Intent intent = new Intent(MenuActivity.this, MainActivity.class);
                            startActivity(intent);
                        }
                    }
                });
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            HashMap<String, Object> hashMap = (HashMap<String, Object>) getItem(position);
            holder.item_Image.setImageResource((Integer) hashMap.get("image"));
            holder.item_Text.setText((CharSequence) hashMap.get("text"));
            holder.item_TextBg.setBackgroundResource((Integer) hashMap.get("textImage"));
            holder.item_layoutBg.setBackgroundResource((Integer) hashMap.get("layoutBg"));
            return convertView;
        }

        private final class ViewHolder {
            private ImageView item_Image;
            private TextView item_Text;
            private TextView item_TextBg;
            private LinearLayout item_layoutBg;
        }
    }
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会游戏软件分会(CGIA)认证及国际游戏开发教育联合会国际认证。曾经领导和参与《三国群英传说》、《大航海传奇》、《美少女养成计划》等经典游戏的开发 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 Android开发准备工作 2.2 开发包及其工具的安装和配置 2.2.1 安装JDK和配置Java开发环境 2.2.2 Eclipse的安装与汉化 2.2.3 SDK和ADT的安装和配置 2.3 创建第一个Android项目——HeUoAndroid 2.3.1 创建HelloAndroid项目 2.3.2 运行HelloAndroid及模拟器的使用 2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户界面简介 4.1.2 事件处理 4.2 常用控件应用 4.2.1 文本框(Textiew) 4.2.2 列表(ListView) 4.2.3 提示(T0ast) 4.2.4 编辑框(EditText) 4.2.5 单项选择(RadioGroup、RadioButton 4.2.6 多项选择(CheckBox) 4.2.7 下拉列表(Spinner) 4.2.8 自动提示(AutoComplete.TextⅥew) 4.2.9 日期和时间(DatePicker、TimePicker) 4.2.10 按钮(Button) 4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、NotificationManager) 4.2.22 对话框中的进度条(ProgressDialog) 4.3 界面布局 4.3.1 垂直线性布局 4.3.2 水平线性布局 4.3.3.相对布局(RelativeLayout) 4.3.4 表单布局(TableLayout) 4.3.5 切换卡(TabWidget) 4,4 小结 第5章 Android游戏开发 5.1 Android游戏开发框架 5.1.1 View类开发框架 5.1.2 SurfaceView类开发框架 5.2 Graphics类开发 5.5.1 Paint和Color类介绍 5.2.2 Canvas类介绍 5.2.3 几何图形绘制 5.2.4 字符串绘制 5.2.5 图像绘制 5.2.6 图像旋转 5.2.7 图像缩放 5.2.8 图像像素操作 5.2.9 Shader类介绍 5.2.10 双缓冲技术 5.2.11 全屏显示 5.2.12 获得屏幕属性 5.3 动画实现 5.3.1 Tween动画 5.3.2 Frame动画 5.3.3 GIF动画播放 5.4 小结 第6章 Android数据存储 6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享(ContentProviders) 6.7 小结 第7 章多媒体开发 7.1 多媒体开发详解 7.1.1 Open Core 7.1.2 MediaPlayer 7.1.3 MediaRecorder 7.2 播放音乐 7.3 播放视频 7.4 录制歌曲 7.5 相机设置 7.6 闹钟设置 7.7 铃声设置 7.8 小结 第8章 网络与通信 8.1 网络通信基础 8.1.1 无线网络技术 8.1.2 Android网络基础 8.2 HTTP通信 8.2.1 HttpURLConnection接口 8.2.2 HttpClient接口 8.2.3 实时更新 8.3 Socket通信 8.3.1 Socket基础 8.3.2 Socket应用(简易聊天室) 8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Javascript 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 Android特色开发 9.1 传感器 9.2 语音识别 9.3 GoogleMap 9.3.1 GoogleMap概述 9.3.2 准备工作 9.3.3 GoogleMapAPI的使用 9.3.4 定位系统 9.4 桌面组件 9.4.1 快捷方式 9.4.2 实时文件夹 9.4.3 Widget开发 9.5 账户管理 9.6 小结 第三部分 实例篇 第10章 Android应用开发实例 10.1 情境模式 10.2 文件管理器 10.3 通讯录 10.4 音乐播放器 10.5 天气预报 10.6 个人地图 10.7 Widget日历 10.8 小结 第11 章Android游戏开发实例 11.1 手机游戏开发简介 11.2 游戏框架设计 11.3 地图设计 11.4 主角设计 11.5 图层管理器 11.6 游戏音效 11.7 游戏存档 11.8 小结 第四部分 高级篇 第12章 AndroidOpenGL开发基础 12.1 OpenGL简介 12.2 多边形 12.3 颜色 12.4 旋转 12.5 3D 空间 12.6 纹理映射 12.7 光照和事件 12.8 混合 12.9 小结 第13章 AndroidOpenGL综合应用 13.1 移动图像 13.2.3D 世界 13.3 飘动的旗帜 13.4 显示列表 13.5 雾 13.6 粒子系统 13.7 蒙版 13.8 变形 13.9 小结 第14章 游戏引擎实现 14.1 游戏引擎介绍 14.1.1 什么是引擎 14.1.2 引擎的进化 14.1.3 常见的游戏引擎 14.1.4 Android游戏引擎 14.2 游戏引擎结构 14.2.1 游戏引擎原理 14.2.2 游戏引擎定位 14.2.3 游戏引擎框架 14.3 游戏引擎设计 14.3.1 游戏引擎结构和功能设计 14.3.2 游戏引擎设计注意事项 14.4 游戏引擎实现 14.4.1 Activity类实现 14.4.2 流程控制和线程 14.4.3 游戏对象与对象管理 14.4.4 图形引擎 14.4.5 物理引擎 14.4.6 事件模块 14.4.7 工具模块 14.4.8 脚本引擎、音效模块、网络模块 14.5 小结 第15章 优化技术 15.1 优化的基本知识 15.1.1 如何书写出优秀代码 15.1.2 编程规范 15.2 程序性能测试 15.2.1 计算性能测试 15.2.2 内存消耗测试 15.3 初级优化 15.4 高级优化 15.5 Android高效开发 15.6 AndroidUI优化 15.7 其他优化 15.7.1 zipalign 15.7.2 图片优化 15.8 小结 第五部分 扩展篇 第16章 Android NDK开发 16.1 AndroidNDK简介 16.2 安装和配置NDK开发环境 16.2.1 系统和软件需求 16.2.2 NDK开发环境搭建 16.2.3 编译第一个NDK程序 16.3 AndroidNDK开发 16.3.1 JNI接口设计 16.3.2 使用C\C++实现本地方法 16.3 编译C\C++代码 16.4 AndroidNDK中使用0penGL 16.5小结 第17章 Android脚本环境 17.1 Android脚本环境简介 17.2 Android脚本环境安装 17.3如何编写Android脚本程序 17.4小结
前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 Android开发准备工作 2.2 开发包及其工具的安装和 配置 2.2.1 安装JDK和配置Java开发 环境 2.2.2 Eclipse的安装与汉化 2.2.3 SDK和ADT的安装和 配置 2.3 创建第一个Android项目——HeUoAndroid 2.3.1 创建HelloAndroid项目 2.3.2 运行HelloAndroid及模拟器的使用 2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户界面简介 4.1.2 事件处理 4.2 常用控件应用 4.2.1 文本框(Textiew) 4.2.2 列表(ListView) 4.2.3 提示(T0ast) 4.2.4 编辑框(EditText) 4.2.5 单项选择(RadioGroup、RadioButton 4.2.6 多项选择(CheckBox) 4.2.7 下拉列表(Spinner) 4.2.8 自动提示(AutoComplete.TextⅥew) 4.2.9 日期和时间(DatePicker、TimePicker) 4.2.10 按钮(Button) 4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、NotificationManager) 4.2.22 对话框中的进度条(ProgressDialog) 4.3 界面布局 4.3.1 垂直线性布局 4.3.2 水平线性布局 4.3.3.相对布局(RelativeLayout) 4.3.4 表单布局(TableLayout) 4.3.5 切换卡(TabWidget) 4,4 小结 第5章 Android游戏开发 5.1 Android游戏开发框架 5.1.1 View类开发框架 5.1.2 SurfaceView类开发框架 5.2 Graphics类开发 5.5.1 Paint和Color类介绍 5.2.2 Canvas类介绍 5.2.3 几何图形绘制 5.2.4 字符串绘制 5.2.5 图像绘制 5.2.6 图像旋转 5.2.7 图像缩放 5.2.8 图像像素操作 5.2.9 Shader类介绍 5.2.10 双缓冲技术 5.2.11 全屏显示 5.2.12 获得屏幕属性 5.3 动画实现 5.3.1 Tween动画 5.3.2 Frame动画 5.3.3 GIF动画播放 5.4 小结 第6章 Android数据存储 6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享(ContentProviders) 6.7 小结 第7 章多媒体开发 7.1 多媒体开发详解 7.1.1 Open Core 7.1.2 MediaPlayer 7.1.3 MediaRecorder 7.2 播放音乐 7.3 播放视频 7.4 录制歌曲 7.5 相机设置 7.6 闹钟设置 7.7 铃声设置 7.8 小结 第8章 网络与通信 8.1 网络通信基础 8.1.1 无线网络技术 8.1.2 Android网络基础 8.2 HTTP通信 8.2.1 HttpURLConnection接口 8.2.2 HttpClient接口 8.2.3 实时更新 8.3 Socket通信 8.3.
这个问题比较广泛,可能需要更具体的问题才能提供更详细的帮助。不过,一般来说,一个 Android 个人中心界面可能包含以下组件或模块: 1. 用户信息展示:包括头像、昵称、手机号码、邮箱等等。 2. 功能模块:个人中心一般会提供一些用户常用的功能,比如修改密码、查看订单、收货地址管理等等。 3. 设置:用户可以在个人中心中进行一些系统设置,例如修改语言、通知设置、隐私设置等等。 4. 帮助与反馈:用户可以在个人中心中查看常见问题、联系客服等等。 下面是一个简单的 Android 个人中心布局代码示例,你可以根据需要自行修改和扩展: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 用户信息展示 --> <LinearLayout android:id="@+id/user_info_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="16dp"> <!-- 头像 --> <ImageView android:id="@+id/avatar_image_view" android:layout_width="72dp" android:layout_height="72dp" android:src="@drawable/avatar_placeholder"/> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:paddingStart="16dp"> <!-- 昵称 --> <TextView android:id="@+id/nickname_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="昵称" android:textSize="18sp"/> <!-- 手机号码 --> <TextView android:id="@+id/phone_number_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="手机号码" android:textSize="14sp"/> <!-- 邮箱 --> <TextView android:id="@+id/email_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="邮箱" android:textSize="14sp"/> </LinearLayout> </LinearLayout> <!-- 功能模块 --> <GridView android:id="@+id/function_grid_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/user_info_layout" android:numColumns="3" android:verticalSpacing="16dp" android:horizontalSpacing="16dp"/> <!-- 设置 --> <Button android:id="@+id/settings_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="设置" android:layout_below="@id/function_grid_view" android:layout_margin="16dp"/> <!-- 帮助与反馈 --> <Button android:id="@+id/help_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="帮助与反馈" android:layout_below="@id/settings_button" android:layout_margin="16dp"/> </RelativeLayout> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值