- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Android Material Design 规范说“类型与 4 dp 基线网格对齐。”( http://www.google.com/design/spec/layout/metrics-and-keylines.html# )
它还在示例图形中说明列表中的一行应为 72dp 高。
它还指示不同的字体样式以及字体应该是什么大小以及它的前导应该是什么(http://www.google.com/design/spec/style/typography.html#typography-standard-styles)。
我正在尝试将所有这些规则应用于我的应用程序以调整列表中一行的布局,但是我不知道如何在我的行中分隔文本框。
我在每一行中显示 3 行文本
标题行 1 - 尺寸 14sp 详细信息第二行 - 尺寸 12sp 详细信息行三 - 尺寸 12sp
如何确保每个文本框中的文本基线与网格对齐?我无法对齐文本框的底部,因为这不是基线,文本框的底部是基线 + 下降,不是吗?
我需要尽可能均匀地隔开 3 行文本,但要确保它们的基线与网格对齐。
我不相信我可以简单地使用填充/边距,因为这不能确保每行文本的基线与网格对齐。
此外,当我进行所有这些计算时,我需要确保行高为 72dp(对于指定了正常字体大小的 mdpi 设备)。
最后我将如何指定前导?据我了解,这是从上一行文本的基线到底行最高文本顶部的空间。同样,我不能使用填充/边距,因为这不是来自基线。
编辑:列表的 Material Specification 提供了更多关于当您有 3 行文本时列表中的 Tiles 应该如何显示的信息。 http://www.google.co.uk/design/spec/components/lists.html#lists-keylines
但它仍然没有说明这 3 行文本实际上是如何垂直放置的,以便它们的基线在 4dp 网格上对齐。
最佳答案
更新
根据我的回答,我做了 a small library .它比这个答案更适合现实世界的使用,所以请随时查看。
不是简单地确保 4dp 对齐,它允许分别设置所有行和第一行的前导,以及最后一行下降:
之前的回复,留作历史用途(已删除大屏幕截图)
好的,这已经很晚了,但我想出了如何以尽可能不黑的方式做到这一点。
此方法会将现有 View 放置在基线网格上,前提是其上限已经在基线网格上。输入参数是网格的步长(4dp 像素,可能从资源中读取)和所需的行首(例如 20dp 像素)。
请注意,这不会让您获得所需的确切高度,但它会使 TextView 的大小具有确定性(即 step
的高度倍数,基线位于网格),使用整数边距可以更轻松地根据需要进行布局。
private static void setLeading(TextView view, int step, int leading) {
// This is to make the behavior more deterministic: remove extra top/bottom padding
view.setIncludeFontPadding(false);
// Get font metrics and calculate required inter-line extra
Paint.FontMetricsInt metrics = view.getPaint().getFontMetricsInt();
final int extra = leading - metrics.descent + metrics.ascent;
view.setLineSpacing(extra, 1);
// Determine minimum required top extra so that the view lands on the grid
final int alignTopExtra = (step + metrics.ascent % step) % step;
// Determine minimum required bottom extra so that view bounds are aligned with the grid
final int alignBottomExtra = (step - metrics.descent % step) % step;
view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + alignTopExtra, view.getPaddingRight(), view.getPaddingBottom() + alignBottomExtra);
}
关于Android material 对齐字体基线到 4dp 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26487565/
我一直在不同的设备上测试相同的字体(Big John 是字体的名称)。字体的高度或基线在不同设备上不一致。 图片如下: Windows Chrome: Android Chrome: macOS
如何删除出现在 qml 中文本区域下方的行?有可能吗?因为律动音乐有没有台词的东西!那是什么?如果不是,我应该改用什么其他组件? 提前致谢 TextArea{ id:searc
如何删除出现在 qml 中文本区域下方的行?有可能吗?因为律动音乐有没有台词的东西!那是什么?如果不是,我应该改用什么其他组件? 提前致谢 TextArea{ id:searc
这是我遇到的问题的一个简单示例: Foo Bar Baz Bat Plugh XYZZY 除了 TextBox
我目前正在编写一个 Java-FX 程序,其中包含 GridPane 中的 ListView。我想将 ListView 的第一个项目的基线与 ListView 左侧的标签对齐,但 ListView 最
我有一个 iOS 5 时代的应用程序,我需要将其更新为“现代”条款,以便能够向应用程序商店提交更新。我以 iOS 8 为基准,使用自动布局和尺寸分类。 基本 UI 是一个选项卡栏 Controller
在eclipse源码库中编译。我有“尚未设置 API 基线...”错误。 我尝试添加 API Baseline,但我不知道如何制作或添加它。 API Baseline 的用途是什么,如何添加或制作?
我认为我是一种管理我的内容的好方法,但你不太确定这是否可行。 认为 fexbox 可以派上用场...关于我如何划分问题的 3 个简单案例 我想要一个网格,其中的元素背景与行中最大的元素对齐。 我希望所
我正在尝试在 OpenAI 基线中运行 SuperMarioBros 环境。通常这些复古环境与健身房图书馆支持的原生attari 2600不同。 为了使其与基线一起运行,需要安装 retro 附带的第
这个问题在这里已经有了答案: How to control key-frame generation of ffmpeg? (1 个回答) 6年前关闭。 我是 FFMPEG 的新手。我正在尝试对基线配
请参阅此页面> www.tvdiever.nl HTML: CSS: /* @fontface! */ /* all fine in all browsers mac or windows *
有人知道这个 websockets 安全问题的解决方案吗?它在 1.5 基准上运行良好,但在 2.0 上运行不佳。有什么想法可能是问题所在以及 SSL/TLS 从 1.5 到 2.0 发生了什么变化?
在 vagrant 文档中,我没有找到有关在使用“vagrant package”时如何在同一基线框中引用包含的 Vagrantfile 中包含的文件的提示。有人可以帮忙吗? 详细信息: 从头开始为
我有一个实时视频流相机设备,它与我的 Android 手机处于同一网络中。我的安卓版本是 4.1.2。摄像机通过 RTSP 传输视频,其格式为 MP4。地址为:rtsp://192.168.0.102
在 OpenAI 基线代码 DQN 上, tf.stop_gradient 是在构建操作图时对目标网络的 q 值使用的,以防止目标 q 值对损失最小化的贡献。 (第 213 行) 但是,在调用 min
以下是当我向现有代码添加任何新方法时遇到的错误(尤其是当我向接口(interface)或类添加任何方法时) --- animal-sniffer-maven-plugin:1.15:check (d
我是一名优秀的程序员,十分优秀!