当前位置:  开发笔记 > Android > 正文

如何防止堆栈布局表单中的标签被切断

如何解决《如何防止堆栈布局表单中的标签被切断》经验,为你挑选了1个好方法。

我有两个标签彼此相邻.第一个很长,如果需要应该被截断.第二个应该完全显示 - 无论如何.

这是我的代码:

MainPage = new ContentPage {
    Content = new StackLayout {
        Orientation = StackOrientation.Horizontal,
        VerticalOptions = LayoutOptions.CenterAndExpand,
        BackgroundColor = Color.Orange,
        Padding = 10,
        Children = {
            new Label {
                Text = "The answer to life the universe and everything",
                HorizontalOptions = LayoutOptions.Start,
                LineBreakMode = LineBreakMode.TailTruncation,
                BackgroundColor = Color.Yellow,
            },
            new Label {
                Text = "42",
                HorizontalOptions = LayoutOptions.EndAndExpand,
                LineBreakMode = LineBreakMode.NoWrap,
                BackgroundColor = Color.Yellow,
            },
        },
    },
};

这就是我得到的:

我的问题:如何防止"42"被切断?

当前结果的解释:我想我知道,为什么第二个标签太小了.在截断第一个文本之前协商两个标签的大小.因此,两个标签都需要缩小一点,尽管第一个标签可以更好地处理它.

想法1:我尝试了相对布局(而不是堆栈布局).但是,这是一个相当复杂的方法,我在iOS和Android上获得了不同的结果.所以我希望能有一个更简单的解决方案.

想法2:我应该覆盖其中一种布局或大小协商方法吗?也许"42"布局可以强制获得所需的宽度.

想法3:也许我们可以为iOS和Android提供自定义标签渲染器,按照预期处理尺寸协商.


更新

"42"只是一个例子.在我的最终应用程序中,这将动态更改,并且可以是不同长度的字符串.因此,MinimumWidthRequest如果不知道渲染字符串的宽度,设置就无济于事.



1> Mike Ma..:

如何防止"42"被切断?

您可以MinimumWidthRequest在"42"中设置Label以防止它被切断.

有关详细信息,MinimumWidthRequest请参阅文档的备注部分.

代码示例:

MainPage = new ContentPage {
    Content = new StackLayout {
        Orientation = StackOrientation.Horizontal,
        VerticalOptions = LayoutOptions.CenterAndExpand,
        BackgroundColor = Color.Orange,
        Padding = 10,
        Children = {
           new Label {
              Text = "The answer to life the universe and everything The answer to life the universe and everything",
              HorizontalOptions = LayoutOptions.Start,
              LineBreakMode = LineBreakMode.TailTruncation,
              BackgroundColor = Color.Yellow,
           },
           new Label {
              MinimumWidthRequest = 50,
              Text = "42",
              HorizontalOptions = LayoutOptions.EndAndExpand,
              LineBreakMode = LineBreakMode.NoWrap,
              BackgroundColor = Color.Yellow,
           },
       },
    },
};

结果如下:

在此输入图像描述


哇!这个.是.只是.真棒!并且绝对违反直觉的是,任意大数的*最小*宽度请求正确地缩放标签.如果左侧文本较短且未截断,则黄色框甚至不会比文本"42"大.我认为你的50的值可以很好地适应这个例子.但我只会使用像1000或1e6这样的大常量,它完全适用于Android和iOS.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有