如何在 jetpack compose 中显示具有适当大小/布局的垂直文本

2024-01-03

如何在 jetpack 中正确旋转文本并使其进行正确的布局?当我使用rotate文本对象上的修饰符会旋转文本,但布局中占用的大小似乎使用预旋转的文本宽度。

这是我想要完成的一个简单示例 - 垂直文本应该位于狭窄空间的左侧:

@Composable
fun MainBox() {
    Column(
        modifier = Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(
            modifier = Modifier.padding(4.dp).background(Color.Gray),
            text = "This is at the top"
        )

        Row(
            modifier = Modifier.fillMaxWidth().weight(1f),
            verticalAlignment = Alignment.CenterVertically
        ) {

            Text(
                modifier = Modifier.padding(4.dp).rotate(-90f),
                text = "This should be vertical text on the left side"
            )

            Text(
                modifier = Modifier.fillMaxSize().background(Color.Yellow),
                textAlign = TextAlign.Center,
                text = "This is a big yellow box that should take up most of the space"
            )
        }
    }
}

然而,这表明的就是这个。

如果我缩短垂直文本中的文本,它只会占用一个狭窄的空间,这看起来更像我想要的布局。

有没有一种方法可以拦截布局过程或用于固定大小的其他设置,以便垂直文本仅占用一个文本行的水平空间宽度,但仍然适应用户字体大小的变化(因此没有固定大小)?

类似问题的回答here https://stackoverflow.com/questions/62767755/how-to-stack-text-vertically-with-rotation-using-jetpack-compose and here https://stackoverflow.com/questions/66705884/make-a-row-of-rotated-text-in-jetpack-compose不解决这个问题或者不再工作。


我的版本。经过几次测试后似乎效果很好

class ComposeActivity7 : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            ComposeTutorialTheme {

                Column(
                    modifier = Modifier.fillMaxSize(),
                    horizontalAlignment = Alignment.CenterHorizontally
                ) {
                    Text(
                        modifier = Modifier
                            .padding(4.dp)
                            .background(Color.Gray),
                        text = "This is at the top"
                    )

                    Row(
                        modifier = Modifier
                            .fillMaxWidth()
                            .weight(1f),
                        verticalAlignment = Alignment.CenterVertically
                    ) {
                        Text(
                            modifier = Modifier
                                .vertical()
                                .rotate(-90f)
                                .background(Color.Gray)
                                .padding(4.dp),
                            text = "This should be vertical text on the left side"
                        )
                        Text(
                            modifier = Modifier
                                .fillMaxSize()
                                .background(Color.Yellow),
                            textAlign = TextAlign.Center,
                            text = "This is a big yellow box that should take up most of the space"
                        )
                    }
                }
            }
        }
    }
}

fun Modifier.vertical() =
    layout { measurable, constraints ->
        val placeable = measurable.measure(constraints)
        layout(placeable.height, placeable.width) {
            placeable.place(
                x = -(placeable.width / 2 - placeable.height / 2),
                y = -(placeable.height / 2 - placeable.width / 2)
            )
        }
    }

Result

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

如何在 jetpack compose 中显示具有适当大小/布局的垂直文本 的相关文章

  • Android Wear:在手持设备上启动服务

    我正在构建一个 Wear 应用程序 它将与手持设备上的 WearableListenerService 进行通信 但是 我想确保当应用程序在手表上启动时服务已启动并运行 我最初的想法是发送意图或广播消息来启动服务 但是 我一直无法弄清楚如何
  • 如何在android中将多个图像合并为一个图像?

    我正在开发 android 的分布式应用程序 我已将单个图像分成 4 个部分 然后对其进行处理 现在我想将 4 个位图图像组合成一个图像 我怎样才能做到这一点 Bitmap parts new Bitmap 4 Bitmap result
  • 从非风味应用程序引用的 Android 多风味库 - AAPT:找不到资源

    我有包含字符串资源的库
  • Android Surface 与 Canvas 的关系

    Surface 和 Canvas 之间到底是什么关系 请解释 表面是一个缓冲区 画布保存绘图 视图未附加到画布 也不是表面 窗户被绑在 Surface 和 ViewRoot 询问 随后使用的画布表面 通过要绘制的视图 详细答案你可以阅读这篇
  • 如何在状态更改时更改 Android 切换按钮的文本颜色?

    我的切换按钮对于每个状态都有不同的颜色背景 红色和白色 现在我需要在激活时更改切换按钮文本 红色 白色 的颜色 使用 xml 我无法让它工作 也许有人知道我做错了什么 我的布局 xml 中的按钮
  • cordova - 删除不必要的权限

    我需要在游戏中播放声音 因此我将 org apache cordova media 插件添加到我的应用程序中 现在platforms android AndroidManifest xml包含2个我不需要的条目
  • Android 上的嵌套滚动

    我们的活动中有一个主要的水平滚动视图 以及嵌套在其中的几个垂直滚动视图 这个想法是水平滚动 直到找到所需的垂直列表 然后上下滚动 理想情况下 一旦开始垂直滚动 我希望垂直滚动具有 锁定 现在会发生什么 如果您非常小心 您可以垂直滚动 但如果
  • Android EditText默认数字键盘和允许文本[重复]

    这个问题在这里已经有答案了 可能的重复 EditText 默认带有数字键盘 但允许字母字符 https stackoverflow com questions 3544214 edittext with number keypad by d
  • 使用 Retrofit 2 添加标头以请求

    我正在尝试发送带有身份验证标头的请求 但服务器似乎无法识别客户端 我用了this https futurestud io tutorials android basic authentication with retrofit教程 并实现了
  • Android Facebook SDK 和 URL 方法成功形成好友对话框,但无法提交

    我开始认为这是一个错误 请证明我错了 我想以编程方式在 Facebook 上加好友 他们是唯一且肯定是该人在现实生活中认识的人 以下三种解决方案都具有相同的结果 成功的好友对话框 意味着个人资料名称 图片 指示操作的语句 与某人成为好友 以
  • Android 缩放和密度问题

    Update 一些研究表明 华硕 Transformer TF700T 高端 的像素密度应约为 224 因此 android 报告的 159 值要么是错误的 要么已被某种方式修改 system 中的 lcd 密度键 build prop 由
  • GpsStatusListener:尽管状态为 GpsStatus.GPS_EVENT_FIRST_FIX,但修复中未使用卫星

    我向我的位置管理器添加了一个 GPS 状态侦听器 以便查看何时获得第一个修复 当我收到 GPS EVENT FIRST FIX 时 我会循环遍历所有卫星 但为什么修复中没有使用它们 usedInFix 我的日志对所有卫星都显示 错误 fin
  • 如何以编程方式设置 ConstraintLayout 的 XML 属性“layout_constrainedWidth”?

    ConstraintLayout中 如何转换xml属性 app layout constrainedWidth true false in code 如果你想设置constrainedWidth Height以编程方式 那么你必须采取Con
  • 以编程方式卸载 Android 应用程序

    我希望能够允许我的用户从我的应用程序中卸载应用程序 就像 Google Play 商店允许其用户一样 请下图 主要问题是如何定义一个按钮 按下它我们可以通过提供包名称或其他一些信息来卸载应用程序 就像图像上的卸载按钮一样 try Inten
  • Android 中 Activity 的服务回调

    我有我的 GPSTracker 的摘要 它返回用户的位置 其作品 public class GPSTracker extends Service implements LocationListener public GPSTracker C
  • Android 中可以导入 java.rmi.* 吗?

    我的分布式系统课程中有一个项目 我们必须在我们的项目中使用 java rmi 而且我知道由于 dalvik VM 问题 android 不提供这个库 所以我只是想问是否可以在 Android 上使用这些库 Thanks Android 不支
  • Android:了解 OnDrawFrame、FPS 和 VSync (OpenGL ES 2.0)

    一段时间以来 我在 Android 游戏中遇到了运动精灵间歇性 卡顿 的情况 这是一个非常简单的 2D OpenGL ES 2 0 游戏 这是一个持续存在的问题 我已经多次重新访问过 在我的游戏循环中 我有 2 个 计时器 一个用于记录前一
  • 尝试在后台使用 AsyncTask 解析 JSON 时强制关闭

    我是 Android 开发新手 正在研究 json 数据 我设法让解析工作 我想显示一个 ProgressDialog 我读到我需要使用 AsyncTask 但由于某种原因 一旦我将相同的工作代码放入 doInBackground 中 即使
  • 我收到“循环依赖”Android Dagger Hilt 错误

    我从头开始检查了所有内容 但找不到错误 我找不到错误 可能是什么 我收到以下编译错误 HomeViewModel java 6 error ComponentProcessor MiscError dagger internal codeg
  • API 24 AccessibilityService.dispatchGesture() 方法如何工作?

    通过 API 24 我们有了一种向设备发送手势的方法 但是目前还没有可靠的文档或示例 我正在尝试让它工作 但目前手势每次都会点击 onCancelled 回调 这是我调用该方法的代码 TargetApi 24 private void pr

随机推荐

  • 使用 XML::LibXML 迭代 xml 节点的 perl 脚本

    我正在尝试编写一个 perl 脚本来迭代某些节点并获取 xml 文件中的值 我的 XML 文件如下所示并保存为 spec xml
  • 如何在 Swift 中声明和初始化数组

    我在 Swift 中有一个类 我正在尝试编写它 它有一个对象数组的变量 有更好的方法来写这个吗 var myvar Array
  • 使用 FileManager 复制文件时出错(CFURLCopyResourcePropertyForKey 失败,因为传递的 URL 没有方案)

    我正在尝试使用以下命令将一些 媒体 文件从一个文件夹复制到另一个文件夹FileManager s copyItem at path 但我收到错误 CFURLCopyResourcePropertyForKey 失败 因为它传递的 URL 没
  • Elastic Search - 用于内部命中的 java api

    我做了一些查询 如下所示 query nested path comments votes query inner hits 我将它转换为java api QueryBuilders boolQuery must boolQuery mus
  • 为不同的语言环境定制 java.text 格式化程序

    构建一个支持不同语言环境的 java 应用程序 但想要自定义DateFormat显示超出之间可用的内容FULL LONG MEDIUM and SHORT日期格式选项 想做一些事情 比如在日期和时间部分之间放置一个字符DateFormat
  • 索引 0 {} 处缺少参数名称

    我尝试写一个演示 交付演示 https github com CIeNET Corda deliverydemo基于训练营cordapp https github com corda bootcamp cordapp并参考cordapp 示
  • 使用反射更改只读属性

    是否可以 通过反思还是其他方式 正如其他人所说 如果您需要这样做 那么您首先将面临设计问题 现在 如果你想知道这是否可能只是为了了解 或者如果地球上没有其他方法可以做到这一点 那么在一个非常小的帮助下 这确实是可能的辅助库 http git
  • 如何将数据文件包含在应用程序的 APK 中?

    我想在安装 Android 应用程序时创建一些预先创建的文件 我想在内部存储器 data data files 和新创建的 sdcard 目录 sdcard data1 中创建文件 我怎样才能做到这一点 如果您有大量文件和目录结构 则应使用
  • 如何使用 Stylish 或 Greasemonkey 替换 @media (max-width)?

    我在查看时遇到问题这个网站 http www fleaflicker com nfl 在我的桌面浏览器上 它们采用响应式 流畅设计 当浏览器宽度小于 990 像素时 显示移动菜单按钮而不是水平导航栏 由于我使用的是 125 缩放的 Fire
  • 如何在pandas中创建日历表(日期维度)

    数据库设计中有时会使用带有主键的日期表 date id Date Record timestamp Day Week Month Quarter Year half Year 0 2000 01 01 NaN Saturday 52 1 1
  • Django:db_index 和 makemigrations

    我想在模型中的现有字段中添加一些 db index 我刚刚添加了db index True到模型 我想我需要跑步python manage py migrate将它们应用到数据库上 我的问题是没有检测到任何更改 因此没有创建迁移 这是正常行
  • 使用 python 和 OpenCV 从图像中提取数字

    我正在寻找一些编码解决方案 帮助从液晶显示屏中提取数字 然后从图像中输出值 下面是代码和示例图像以及到目前为止我是如何得到的 但我需要一些进一步的帮助来实际从图像中提取 数字 并输出值 我从前面的例子中制作了数字查找表 import the
  • 尝试加载字体时出现 GD 错误

    我尝试通过以下方式加载字体图像加载字体 http www php net manual en function imageloadfont php功能 当我运行脚本时 我收到错误 gd warning product of memory a
  • R语言,暂停循环并要求用户继续

    我有一个想法在某些迭代中暂停循环并向 用户 询问一些答案 例如 some value 0 some criteria 50 for i in 1 100 some value some value i if some value gt so
  • 如何捕获无效的用户输入[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我不理解 Try throw catch 语句 并且想知道当代码中的所有 put 都应该是 int 时 捕获 char 的最佳方式是什么 这
  • TableView 单元格分隔线未延伸到整个单元格

    我正在开发一个新项目 并在 UI 中使用了故事板 我的所有 tableView 都存在行分隔符问题 下图显示了两条线 第一个是在属性检查器中设置的蓝色 第二个是黑色的 添加了我放置在单元格中的 imageView 该线确实延伸到单元格的右侧
  • 如何在 Java 中连接两个列表?

    有没有比以下更简单的方法 List
  • 无需分组即可获得最大值

    假设我有一张这样的表 name age a 1 b 2 c 3 d 4 e 5 f 6 通常 当我们选择 MAX age 时 它返回 f 6 元组 但我想要的是它应该按原样返回表 但所有年龄值都将是最大值 例如 name age a 6 b
  • 使用 Flyway 管理修补程序

    假设我有 2 个分支 Develop与迁移 V1 change1 V2 change2 V3 change3 V4 change4 V5 change5 Master迁移 部署在生产环境中 V1 change1 V2 change2 现在我
  • 如何在 jetpack compose 中显示具有适当大小/布局的垂直文本

    如何在 jetpack 中正确旋转文本并使其进行正确的布局 当我使用rotate文本对象上的修饰符会旋转文本 但布局中占用的大小似乎使用预旋转的文本宽度 这是我想要完成的一个简单示例 垂直文本应该位于狭窄空间的左侧 Composable f