Android 九宫格布局

这篇具有很好参考价值的文章主要介绍了Android 九宫格布局。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果图

Android 九宫格布局,Android,android

实现思路:

1.使用GridView来实现九宫格布局,设置numColumns=3。

2.图标使用的是Font Awesome矢量图标,详情可以参考Android 在APP中使用 Font Awesome 图标_.fa-headphones_清山博客的博客-CSDN博客

实现步骤:

1.布局文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <!--标题-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAlignment="center">
        <TextView
            android:id="@+id/txtTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="60dp"
            android:textColor="@color/black"
            android:textSize="20dp"
            android:layout_weight="1"
            android:text="@string/app_name"
            android:textAlignment="center" />
    </LinearLayout>

    <!--九宫格-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.2"
        android:gravity="top"
        android:orientation="vertical"
        android:padding="10dp"
        android:textAlignment="center">

        <GridView
            android:id="@+id/gridView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:numColumns="3"
            android:stretchMode="columnWidth"
            android:verticalSpacing="25dp"></GridView>
    </LinearLayout>


</LinearLayout>

就一个标题和一个GridView两部分组成。

activity_main_menu_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layMenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_columnWeight="1"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="10dp">

    <TextView
        android:id="@+id/txtIco"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="10dp"
        android:text="图标"
        android:textColor="@color/black"
        android:textSize="36dp" />

    <TextView
        android:id="@+id/txtName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="名称" />
</LinearLayout>

关键设置 

GridView

android:layout_centerInParent="true"
android:numColumns="3"
android:stretchMode="columnWidth"

内部Item

android:layout_columnWeight="1"
android:gravity="center"
android:orientation="vertical"

2.后置文件 MainActivity.java

package com.qingshanblog;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.ActionBar;

public class MainActivity extends BaseActivity {

    GridView gridView;
    public int[] menu = new int[]{R.string.menu_blog, R.string.menu_qrlogin, R.string.menu_location, R.string.menu_scan, R.string.menu_camera, R.string.menu_config};
    public int[] ico = new int[]{R.string.fa_blog, R.string.fa_unlock, R.string.fa_location, R.string.fa_qr, R.string.fa_camera, R.string.fa_config};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //不显示标题
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        SetStatusBarTransparent();//状态栏透明
        SetStatusBarTextColor(true);//状态栏文字变黑

        gridView = (GridView) findViewById(R.id.gridView);
        MenuAdapter adapter = new MenuAdapter();
        gridView.setAdapter(adapter);
    }


    public class MenuAdapter extends BaseAdapter {

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

        @Override
        public Object getItem(int i) {
            return null;
        }

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

        @Override
        public View getView(final int i, View view, ViewGroup viewGroup) {
            View view1 = View.inflate(MainActivity.this, R.layout.activity_main_menu_item, null);

            //单个按钮布局
            LinearLayout layout = (LinearLayout) view1.findViewById(R.id.layMenu);
            layout.setTag(menu[i]);
            layout.setOnClickListener(view2 -> {
                LinearLayout txt = (LinearLayout) view2;
                int name = (int) txt.getTag();
                Intent t;
                switch (name) {
                    case R.string.menu_blog:
                        t = new Intent(MainActivity.this, BlogActivity.class);
                        startActivity(t);
                        break;
                    case R.string.menu_qrlogin: 
                        break;
                    case R.string.menu_location:
                        t = new Intent(MainActivity.this, LocationActivity.class);
                        startActivity(t);
                        break;
                    case R.string.menu_scan:
                        t = new Intent(MainActivity.this, ScanActivity.class);
                        startActivity(t);
                        break;
                    case R.string.menu_camera:
                        t = new Intent(MainActivity.this, CameraActivity.class);
                        startActivity(t);
                        break;
                    case R.string.menu_config:
                        t = new Intent(MainActivity.this, ConfigActivity.class);
                        startActivity(t);
                        break; 
                    default:
                        Toast toast = Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT);
                        toast.show();
                        break;
                }
            });

            //设置图标
            TextView txtIco = view1.findViewById(R.id.txtIco);
            txtIco.setTypeface(AppContext._font);
            txtIco.setText(ico[i]);

            //设置菜单
            TextView txtName = view1.findViewById(R.id.txtName);
            txtName.setText(menu[i]); 
            return view1;

        }

    }
 
}
BaseActivity.java 主要就2个方法,用来隐藏顶部状态栏,如果不需要,则可以不用。
package com.qingshanblog;

import android.os.Build;
import android.view.View;
import android.view.WindowManager;

import androidx.appcompat.app.AppCompatActivity;

public class BaseActivity extends AppCompatActivity {

    //设置状态栏字体为黑色
    protected void SetStatusBarTextColor(boolean isBlack) {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
            if (isBlack) {
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//设置状态栏黑色字体
            } else {
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);//恢复状态栏白色字体
            }
        }
    }

    //设置半透明状态栏
    protected void SetStatusBarTransparent() {
        if (Build.VERSION.SDK_INT >= 21) {//21表示5.0
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
            decorView.setSystemUiVisibility(option);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        } else if (Build.VERSION.SDK_INT >= 19) {//19表示4.4
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //虚拟键盘也透明
            //getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
    }
}

3.用到的资源文件 string.xml

<resources>
    <string name="app_name">清山博客</string>
    <!--九宫格导航菜单-->
    <string name="menu_blog">清山博客</string>
    <string name="menu_qrlogin">扫码登录</string>
    <string name="menu_location">定位示例</string>
    <string name="menu_scan">扫描识别</string>
    <string name="menu_camera">拍照上传</string>
    <string name="menu_config">参数配置</string>

    <!--参考:http://www.htmleaf.com/ziliaoku/font-awesome/font-awesome-4-4-0.html-->
    <string name="fa_users">&#xf0c0;</string>
    <string name="fa_blog">&#xf268;</string>
    <string name="fa_qr">&#xf06e;</string>
    <string name="fa_location">&#xf124;</string>
    <string name="fa_unlock">&#xf108;</string>
    <string name="fa_camera">&#xf030;</string>
    <string name="fa_config">&#xf013;</string>

</resources>

文件目录结构

Android 九宫格布局,Android,android文章来源地址https://www.toymoban.com/news/detail-699069.html

到了这里,关于Android 九宫格布局的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android 布局 横屏 android横屏适配

    一、刘海屏适配 1、layoutInDisplayCutoutMode属性 Android 9.0系统中提供了3种layoutInDisplayCutoutMode属性来允许应用自主决定该如何对刘海屏设备进行适配。 LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 这是一种默认的属性,在不进行明确指定的情况下,系统会自动使用这种属性。这种属性允许应用程

    2024年02月09日
    浏览(38)
  • 【pyqt5界面化开发-5】网格布局(九宫格)界面

    需要模块:QGridLayout 代码

    2024年02月11日
    浏览(39)
  • Android常用布局之TableLayout(表格布局)

    TableLayout(即表格布局) 当TableLayout下面写控件、则控件占据一行的大小。(自适应一行,不留空白) 但是, 想要多个组件占据一行 ,则配合 TableRow 实现 TableLayout 继承 自LinearLayout, 因此它 完全支持 LinearLayout所支持的属性,此外,它还有其他的常用属性。 属性名称 功能描述 an

    2023年04月09日
    浏览(39)
  • Android常用布局之FrameLayout(帧布局)

    FrameLayout(帧布局)可以说是六大布局中最为简单的一个布局,这个布局直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的 左上角, 而这种布局方式却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件

    2023年04月10日
    浏览(88)
  • Android基本布局-GridLayout_网格布局

    概述 :网格布局相对于表格布局来说自由度更高,是以行数和列数来确定位置进行排列。就像一间教室,确定好行数与列数就能让同学有序入座。 1. 可以设置布局中组件的排列方式 2. 可以自定行列数 GridLayout 常用布局标签: android:columnCount=\\\"4\\\" :设置最大列数,这里设置为4。

    2023年04月08日
    浏览(48)
  • Android基础学习笔记8:常用布局 - 线性布局

    能说出安卓界面元素层次 能说出安卓常用的布局 能说出线性布局常用的属性 能利用线性布局实现简单的界面设计 能利用线性布局嵌套实现比较复杂的界面 应用界面包含用户可查看并与之交互的所有内容。安卓提供丰富多样的预置 UI 组件,例如结构化布局对象和 UI 控件,您

    2024年02月05日
    浏览(50)
  • 微信小程序-轮播图-九宫格布局--【开发实战(第2版)】

    微信目录集链接在此: 详细解析黑马微信小程序视频–【思维导图知识范围】 难度★✰✰✰✰ 微信小程序开发实战(第2版)入门–【开发实战(第2版)】 ★★✰✰✰ 不会导入/打开小程序的看这里:参考 微信小程序开发实战(第2版)入门–【开发实战(第2版)】 用免费

    2024年02月08日
    浏览(45)
  • 【Android】UI布局之线性布局(登录界面代码)

    1、布局管理 组件在activity中呈现的方式,包含组件大小、间距、对齐方式 Android提供了两种布局的实现方式: .在xml配置文件中声明,通过setContentView(R.layout.main)方法呈现在activity中,通过findViewById()方法获得组件实例。(一般推荐这种方式) 动态生成组件以及设置相关布局

    2024年02月11日
    浏览(47)
  • 九宫格布局小程序-模仿微信钱包界面设计-基础入门

    代码展示: 使用flex布局模型和wx:for属性仿微信“钱包”页面实现九宫格 项目创建完毕之后,在根目录中会生成文件夹pages用于存放页面文件。一般来说首页默认命名为index,表示小程序运行的第一个页面; 将app.json文件内pages属性中的“pages/logs/logs”删除,并删除上一行末尾

    2024年02月08日
    浏览(47)
  • 【Android笔记97】Android之RecyclerView使用GridLayoutManager网格布局

    这篇文章,主要介绍Android之RecyclerView使用GridLayoutManager网格布局。 目录 一、GridLayoutManager网格布局 1.1、功能效果 1.2、案例代码 (1)创建网格布局

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包