如何将 GridLayout.Spec 用于扩展多行的列?

2024-04-15

我正在尝试动态创建一个 2 行 4 列的表。但每种情况下行和列的大小不应相同。也许我会附上一张图片:

我想:

据我了解,当我不使用 XML 标记来使用 setLayoutParams 中的 GridLayout.Spec 来实现此目的时

但我不明白我需要在 GridLayout.Spec 中传递哪些参数?

如果我想将第一行的第一列与第二行的第一列合并,我应该在

GridLayout.LayoutParams (GridLayout.Spec rowSpec, GridLayout.Spec columnSpec)

?

什么是规格?

我看到了例子there https://stackoverflow.com/questions/20871690/dont-understand-how-to-use-gridlayout-spec and there https://stackoverflow.com/questions/10347846/how-to-make-a-gridlayout-fit-screen-size但不完全理解它是如何工作的。

如果在 XML 标记的情况下,我可以使用layout_rowSpan 和layout_columnSpan 来合并行或列,那么如何动态地进行合并呢?


查看下面的代码以获得您正在寻找的布局。添加注释来解释中使用的值GridLayout.Spec创建。

// simple grid layout with WRAP_CONTENT width and height
GridLayout gridLayout = (GridLayout) findViewById(R.id.grid_layout);

// face view takes 2 rows, 1 column -- zero index based
GridLayout.Spec faceRow = GridLayout.spec(0, 2); // starts row 0, takes 2 rows
GridLayout.Spec faceCol = GridLayout.spec(0); // starts col 0, takes 1 col

GridLayout.Spec titleRow = GridLayout.spec(0); // starts row 0, takes 1 row
GridLayout.Spec titleCol = GridLayout.spec(1, 3); // starts col 1, takes 3 cols

GridLayout.Spec plusRow = GridLayout.spec(1); // starts row 1, takes 1 row
GridLayout.Spec plusCol = GridLayout.spec(1); // starts col 1, takes 1 col

GridLayout.Spec minusRow = GridLayout.spec(1); // starts row 1, takes 1 row
GridLayout.Spec minusCol = GridLayout.spec(2); // starts col 1, takes 1 col

GridLayout.Spec checkRow = GridLayout.spec(1); // starts row 1, takes 1 row
GridLayout.Spec checkCol = GridLayout.spec(3); // starts col 1, takes 1 col

// create the LayoutParams using our row/col for each view
GridLayout.LayoutParams faceParams = new GridLayout.LayoutParams(faceRow, faceCol);
faceParams.setGravity(Gravity.FILL_VERTICAL); // fill vertical so we take up the full 2 rows
// dummy text views to fill some space
TextView faceText = new TextView(this);
faceText.setPadding(32, 32, 32, 32); // add some random padding to make the views bigger
faceText.setLayoutParams(faceParams);
faceText.setText("FACE");
faceText.setGravity(Gravity.CENTER);
faceText.setBackgroundColor(Color.RED);
gridLayout.addView(faceText, faceParams);

GridLayout.LayoutParams titleParams = new GridLayout.LayoutParams(titleRow, titleCol);
titleParams.setGravity(Gravity.FILL_HORIZONTAL); // fill horizontal so we take up the full 3 columns
TextView titleText = new TextView(this);
titleText.setPadding(32, 32, 32, 32);
titleText.setLayoutParams(titleParams);
titleText.setText("TITLE");
titleText.setGravity(Gravity.CENTER);
titleText.setBackgroundColor(Color.BLUE);
gridLayout.addView(titleText, titleParams);

GridLayout.LayoutParams minusParams = new GridLayout.LayoutParams(minusRow, minusCol);
TextView minusText = new TextView(this);
minusText.setPadding(32, 32, 32, 32);
minusText.setLayoutParams(minusParams);
minusText.setText("MIN");
minusText.setGravity(Gravity.CENTER);
minusText.setBackgroundColor(Color.YELLOW);
gridLayout.addView(minusText, minusParams);

GridLayout.LayoutParams plusParams = new GridLayout.LayoutParams(plusRow, plusCol);
TextView plusText = new TextView(this);
plusText.setPadding(32, 32, 32, 32);
plusText.setLayoutParams(plusParams);
plusText.setText("PLS");
plusText.setGravity(Gravity.CENTER);
plusText.setBackgroundColor(Color.GREEN);
gridLayout.addView(plusText, plusParams);

GridLayout.LayoutParams checkParams = new GridLayout.LayoutParams(checkRow, checkCol);
TextView checkText = new TextView(this);
checkText.setPadding(32, 32, 32, 32);
checkText.setLayoutParams(faceParams);
checkText.setText("CHK");
checkText.setGravity(Gravity.CENTER);
checkText.setBackgroundColor(Color.MAGENTA);
gridLayout.addView(checkText, checkParams);

希望这有助于理解GridLayout.Spec.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 GridLayout.Spec 用于扩展多行的列? 的相关文章

随机推荐

  • 自动崩溃时重新启动 Docker 容器

    如果容器自动崩溃 我想重新启动它 我不知道该怎么做 我有一个脚本 docker compose deps yml 其中包含 elasticsearch redis nats 和 mongo 我在终端中运行它来进行设置 docker comp
  • 获取Web服务的内容

    我有一个像这样的网址here http www myserver com myservice php param foobar 当我在 Safari 的地址栏中输入该内容时 我会看到类似 错误 或 正常 的结果 那么 如何从代码中正确调用该
  • 有没有一种方法可以从一个方法返回多个整数? [复制]

    这个问题在这里已经有答案了 我有一个这样的方法 private double GetHeight return 2 但我希望能够返回两个不同的数字 例如 2 和 3 有什么方法可以在 C 中做到这一点吗 Yes ValueTuple htt
  • Lua 和序列化闭包

    我正在尝试序列化和反序列化 Lua 闭包 我的基本理解是下面的工厂应该生成闭包 并且Lua在函数和闭包之间没有太多区别 即没有类型 闭包 gt function ffactory x return function return x end
  • 如何为 Mac OSX 安装 Java 7 EE SDK 下载为 .sh 文件

    我是在 Mac OSX 上开发 Java 的新手 我想下载 Java 7 EE SDK 这样我就可以使用 Java 进行桌面 移动 企业开发 下载文件是 sh 具体来说java ee sdk 7 jdk7 macosx x64 我不熟悉 J
  • 无法使用 UWP 应用程序访问我的系统上的 Word 文档

    我正在尝试使用 UWP 应用程序 通用 Windows 编辑现有的 Word 文档 但由于某种原因 我收到 文件不存在 错误 我尝试使用下面的代码来访问word文档 using WordprocessingDocument wordDoc
  • 删除列表元素而不发生突变

    假设你有一个清单 gt gt gt m a b c 我想列一个新清单n包含除给定项目之外的所有内容m 例如该项目 a 但是 当我使用 gt gt gt m remove a gt gt gt m m b c 原始列表已发生变化 值 a 从原
  • Azure 应用程序网关中的 SSL 证书错误

    我们按照指南设置 SSL 应用程序网关 https learn microsoft com en us azure application gateway application gateway ssl portal https learn
  • 生产中的CEF3单进程模式

    在生产中使用单一流程模式是否存在任何真正的陷阱 官方声明似乎不鼓励这种做法 但到 目前为止该应用程序一直稳定 CEF1似乎已经被放弃了 如果使用CEF3单进程进行开发 那么后者至少应该成为测试套件的一部分 因此是稳定的 或者事实并非如此 另
  • Google Api:: 错误:invalid_scope

    我使用 google api OAuth2 登录 gmail 帐户 当 gmail 登录时 我进行身份验证 然后收到错误 错误 invalid scope 此应用尚未经过验证可以访问 无效 https www googleapis com
  • 如何在 vscode API 中替换后删除选择

    在为 vscode 创建扩展时 我陷入了选择困境 现在的问题是 当我通过 api 替换某些范围的 textEditor 时 它会替换该范围并选择该范围 对于片段来说这是一个好主意 但我的扩展要求不是选择替换的文本 我在 api 中搜索但没有
  • 如何使用swift、spritekit和xcode调用admob插页式广告?

    我一直在寻找这个问题的答案 我在 Objective C 中找到了很多例子 谷歌开发者文档等 并在 swift 中找到了一些答案 但没有使用 spritekit 并且作为一个新手 我只是还没有无法弥补这些教程中的差距 将它们整合到我的项目中
  • 如何向正在运行的气流服务添加新的 dag?

    我有一个气流服务 当前作为网络服务器和调度程序的单独 Docker 容器运行 两者都由 postgres 数据库支持 我在两个实例之间同步了 dags 并且在服务启动时正确加载了 dags 但是 如果我在服务运行时将新的 dag 添加到 d
  • 无法让测试单元启动在 ruby​​ 1.9.2 中工作

    我正在使用 Ruby 1 9 2 ruby v 生成 ruby 1 9 2p290 2011 07 09 修订版 32553 x86 64 linux 我正在尝试让它工作 require test unit class TestStartu
  • 如何“合并”、“展平”或“透视”将多行返回到单个结果的查询结果?

    我对表进行了一个简单的查询 它返回如下结果 id id type id ref 2702 5 31 2702 16 14 2702 17 3 2702 40 1 2703 23 4 2703 23 5 2703 34 6 2704 1 14
  • 使用vba从雅虎财经抓取数据

    我需要从雅虎财经页面读取股票的收盘价 我在使用谷歌财经页面之前就已经回答了这个问题 但该页面不再可用 我相信谷歌已经完全改变了它的财经页面 我相信我可以在雅虎财经上应用同样的方法 只需稍作修改 假设雅虎财经对股票代码 AAPL 苹果 有以下
  • 如何使用不同用户表的多重身份验证注销 JWT 令牌

    这是 config auth php 中的代码 guards gt web gt driver gt session provider gt users api gt driver gt jwt provider gt users hash
  • 领域文件的大小是如何发展的?

    领域文件的大小是如何发展的 首先 我有一个包含多个属性的领域文件 其中一个是包含 860 个条目的数组 每个数组条目又包含几个属性 一个数组属性声明条目的名称 我观察到以下情况 如果名称属性为 Criteria A1 直到 Criteria
  • SKReceiptRefreshRequest 每次都询问密码

    我在用SKReceiptRefreshRequest验证来自服务器的收据 问题是每次提示密码时它都会询问我 谁能帮我建议一种更好的方法来验证用户收据 这就是我正在做的事情 我正在使用refreshReceipt当应用程序启动时 void r
  • 如何将 GridLayout.Spec 用于扩展多行的列?

    我正在尝试动态创建一个 2 行 4 列的表 但每种情况下行和列的大小不应相同 也许我会附上一张图片 我想 据我了解 当我不使用 XML 标记来使用 setLayoutParams 中的 GridLayout Spec 来实现此目的时 但我不