Android Studio 笔记3.4 网格布局

一、前言

  1. 了解网格布局特点
  2. 熟悉网格布局常用属性
  3. 掌握线性布局嵌套网格布局
  • 有些应用要求控件很整齐地排成若干行和若干列,当然利用线性布局嵌套是可以实现的,但是太繁琐了,我们可以采用网格布局来实现,就比较简单。

二、笔记

请添加图片描述

(一)网格布局概述

1、布局特点

  • GridLayout布局使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列。
  • 可以自己设置布局中组件的排列方式
  • 可以自定义网格布局有多少行、多少列
  • 可以直接设置组件位于某行某列
  • 可以设置组件横跨几行或者几列

2、继承关系图

  • GridLayout类是ViewGroup子类
    在这里插入图片描述

3、常用属性

(1)
属性 含义
rowCount 行数
columnCount 列数
layout_width 布局宽度
layout_height 布局高度
(2)针对子控件的属性
属性 含义
layout_row 子控件在布局的行数
layout_column 子控件在布局的列数
layout_rowSpan 跨行数
layout_columnSpan 跨列数

(二) 案例演示:计算器界面

1、创建安卓应用

  • 基于Empty Activity模板创建安卓应用 - GridLayoutCalculator
    请添加图片描述
    请添加图片描述

  • 单击【Finish】按钮
    请添加图片描述

2、准备背景图片

  • 将一张背景图片拷贝到drawable目录里
    请添加图片描述

3、字符串资源文件

  • 字符串资源文件 - strings.xml
    请添加图片描述
<resources>
    <string name="app_name">网格布局:计算器界面</string>
</resources>

4、自定义边框配置文件

  • 在drawable目录里添加custom_border.xml
    请添加图片描述
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="5dp" />
    <stroke
        android:width="1dp"
        android:color="#555555" />

    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />

    <gradient
        android:endColor="#eeeeee"
        android:startColor="#aaaaaa" />
</shape>

5、主布局资源文件

  • 主布局资源文件 - activity_main.xml
    请添加图片描述

  • 将默认的约束布局修改为垂直的线性布局,设置相关属性
    请添加图片描述

  • 添加显示运算结果的标签,并设置相关属性
    请添加图片描述

  • 查看预览效果
    请添加图片描述

  • 添加一个网格布局,设置为6行5列
    请添加图片描述

  • 添加第一行的五个按钮
    请添加图片描述

  • 查看预览效果
    请添加图片描述

  • 添加第二行五个按钮,代码跟第一行五个按钮有一点区别注意查看。第一行五个按钮和第二行五个按钮之间最好有一串注释代码分割,后续代码也应如此!
    请添加图片描述

  • 查看预览结果
    请添加图片描述

  • 添加第三行五个按钮
    请添加图片描述

  • 查看预览效果
    请添加图片描述

  • 在第四行添加五个按钮

请添加图片描述

  • 查看预览效果

请添加图片描述

  • 在第五行添加五个按钮,但是第五个按钮跨两行,高度要重新设置

请添加图片描述

  • 查看预览效果

请添加图片描述

  • 第六行添加三个按钮,第一个按钮跨两列,宽度要重新设置
    请添加图片描述

  • 查看预览效果
    请添加图片描述

6、启动应用,查看效果

  • 【0】按钮跨两列,【=】按钮跨两行
    请添加图片描述
  • 完整代码查看
<?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"
    android:background="@drawable/background"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="15dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DevExpress打印相关代码 using System; using System.Windows.Forms; using DevExpress.XtraPrinting; using System.Xml.Serialization; namespace MyDevExpressDemo { /// /// PrintSettingController 的摘要说明。 /// public class PrintSettingController { PrintingSystem ps = null; string formName=null; DevExpress.XtraPrinting.PrintableComponentLink link=null; /// /// /// /// 要打印的部件 /// 此部件对应的布局信息 public PrintSettingController(IPrintable control,string FormName) { formName=FormName; ps=new DevExpress.XtraPrinting.PrintingSystem(); link=new DevExpress.XtraPrinting.PrintableComponentLink(ps); ps.Links.Add(link); link.Component=control; ps.PageSettingsChanged-=new EventHandler(ps_PageSettingsChanged); LoadPageSetting(); ps.PageSettingsChanged+=new EventHandler(ps_PageSettingsChanged); ps.AfterMarginsChange+=new MarginsChangeEventHandler(ps_AfterMarginsChange); } public void Preview() { try { if(DevExpress.XtraPrinting.PrintHelper.IsPrintingAvailable) { Cursor.Current=Cursors.AppStarting; if(_PrintHeader!=null) { PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter; phf.Header.Content.Clear(); phf.Header.Content.AddRange(new string[] {"",_PrintHeader,""}); phf.Header.Font=new System.Drawing.Font("宋体",14,System.Drawing.FontStyle.Bold); phf.Header.LineAlignment=BrickAlignment.Center; } link.PaperKind=ps.PageSettings.PaperKind; link.Margins=ps.PageSettings.Margins; link.Landscape=ps.PageSettings.Landscape; link.CreateDocument(); ps.PreviewForm.Show(); } else { Cursor.Current=Cursors.Default; MessageBox.Show("打印机不可用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } finally { Cursor.Current=Cursors.Default; } } /// /// 打印控制器 /// /// 要打印的部件 public PrintSettingController(IPrintable control) { if(control==null)return; Control c=(Control)control; formName=c.FindForm().GetType().FullName+"."+c.Name; ps=new DevExpress.XtraPrinting.PrintingSystem(); link=new DevExpress.XtraPrinting.PrintableComponentLink(ps); ps.Links.Add(link); link.Component=control; ps.PageSettingsChanged-=new EventHandler(ps_PageSettingsChanged); LoadPageSetting(); ps.PageSettingsChanged+=new EventHandler(ps_PageSettingsChanged); ps.AfterMarginsChange+=new MarginsChangeEventHandler(ps_AfterMarginsChange); } public void ExportToHtml() { try { using(SaveFileDialog fd=new SaveFileDialog()) { fd.Title="导出HTML文件"; fd.RestoreDirectory=true; fd.Filter="HTML文件|*.htm"; fd.FilterIndex=1; if(fd.ShowDialog()==DialogResult.OK) { // if(obj is DevExpress.XtraGrid.GridControl) // { // ((DevExpress.XtraGrid.GridControl)obj).ExportToHtml(fd.FileName); // MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); // } // else if(obj is DevExpress.XtraTreeList.TreeList) // { link.CreateDocument(); ps.ExportToHtml(fd.FileName); MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); // } } } } finally { } } /// /// 网格分组时要导出,请使用这个, /// public void GridGroupToExcel() { DevExpress.XtraGrid.GridControl grid=this.link.Component as DevExpress.XtraGrid.GridControl; if(grid!=null) { using(SaveFileDialog fd=new SaveFileDialog()) { fd.Title="导出Excel文件"; fd.RestoreDirectory=true; fd.Filter="Excel文件|*.xls"; fd.FilterIndex=1; if(fd.ShowDialog()==DialogResult.OK) { grid.ExportToExcel(fd.FileName); MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); } } } } public void ExportToExcel() { try { using(SaveFileDialog fd=new SaveFileDialog()) { fd.Title="导出Excel文件"; fd.RestoreDirectory=true; fd.Filter="Excel文件|*.xls"; fd.FilterIndex=1; if(fd.ShowDialog()==DialogResult.OK) { // if(obj is DevExpress.XtraGrid.GridControl) // { // ((DevExpress.XtraGrid.GridControl)obj).ExportToExcel(fd.FileName); // MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); // } // else if(obj is DevExpress.XtraTreeList.TreeList) // { link.CreateDocument(); ps.ExportToXls(fd.FileName); MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); // } } } } finally { } } string _PrintHeader=null; /// /// 打印时的标题 /// public string PrintHeader { set { _PrintHeader=value; } } /// /// 进行打印 /// public void Print() { try { if(DevExpress.XtraPrinting.PrintHelper.IsPrintingAvailable) { if(_PrintHeader!=null) { PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter; phf.Header.Content.Clear(); phf.Header.Content.AddRange(new string[] {"",_PrintHeader,""}); phf.Header.Font=new System.Drawing.Font("宋体",14,System.Drawing.FontStyle.Bold); phf.Header.LineAlignment=BrickAlignment.Center; } link.PaperKind=ps.PageSettings.PaperKind; link.Margins=ps.PageSettings.Margins; link.Landscape=ps.PageSettings.Landscape; link.CreateDocument(); link.CreateDocument(); ps.Print(); } else { Cursor.Current=Cursors.Default; MessageBox.Show("打印机不可用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } finally { } } private void ps_AfterMarginsChange(object sender, MarginsChangeEventArgs e) { SavePageSetting(); } private void ps_PageSettingsChanged(object sender, EventArgs e) { SavePageSetting(); } //获取页面设置信息 void LoadPageSetting() { try { string path=System.Windows.Forms.Application.StartupPath+"\\PrintLayout"; if(!System.IO.Directory.Exists(path)) { return; } path+="\\"+formName+".xml"; if(!System.IO.File.Exists(path)) { return; } XmlSerializer ser=new XmlSerializer(typeof(UserPageSetting)); UserPageSetting setting=(UserPageSetting)ser.Deserialize(new System.IO.FileStream(path,System.IO.FileMode.Open,System.IO.FileAccess.Read,System.IO.FileShare.ReadWrite)); System.Drawing.Printing.Margins m=new System.Drawing.Printing.Margins(setting.Left,setting.Right,setting.Top,setting.Bottom); ps.PageSettings.Assign(m,(System.Drawing.Printing.PaperKind)setting.PaperKind,setting.Landscape); } catch{} } /// /// 保存当前网格的布局 /// void SavePageSetting() { try { string path=System.Windows.Forms.Application.StartupPath+"\\PrintLayout"; if(!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } path+="\\"+formName+".xml"; DevExpress.XtraPrinting.XtraPageSettings setting= ps.PageSettings; UserPageSetting s=new UserPageSetting(); s.Landscape=setting.Landscape; s.Left=setting.Margins.Left; s.Right=setting.Margins.Right; s.Top=setting.Margins.Top; s.Bottom=setting.Margins.Bottom; s.PaperKind=(int)setting.PaperKind; XmlSerializer ser=new XmlSerializer(s.GetType()); ser.Serialize(new System.IO.FileStream(path,System.IO.FileMode.Create,System.IO.FileAccess.Write,System.IO.FileShare.ReadWrite),s); } catch{} } } /// /// 最终用户对某个打印页的设置 /// [Serializable()] public class UserPageSetting { public UserPageSetting() { } public bool Landscape; public int PaperKind; public int Top; public int Bottom; public int Left; public int Right; } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值