为什么ListView.Header中的这个标签不能显示所有文字?

时间:2016-05-07 12:39:57

标签: android xamarin xamarin.android xamarin.forms

Android:6.0
Xamarin.Forms:2.1.0.6529

创建一个新的Xamarin.Forms项目并粘贴它:

class Model
{
    public string Text
    {
        get;
        set;
    }
}

public class App : Application
{
    public App()
    {
        var label = new Label
        {
            BackgroundColor = Color.Yellow,
            Text = genLongText(),
            HeightRequest = 10000, // force height
        };

        var list = new List<Model>();
        for (int i = 0; i < 10; i++)
        {
            list.Add(new Model { Text = i + " list item" });
        }

        var template = new DataTemplate(typeof(TextCell));
        template.SetBinding(TextCell.TextProperty, nameof(Model.Text));

        var listview = new ListView
        {
            Header = label,
            ItemsSource = list,
            ItemTemplate = template,
            BackgroundColor = Color.Blue,
        };

        var content = new ContentPage
        {
            Title = "test",
            Content = listview
        };

        MainPage = new NavigationPage(content);
    }

    private string genLongText()
    {
        var t = " Welcome to Xamarin Forms!\n";
        var s = "";
        for (int i = 0; i < 2000; i++)
        {
            s += i.ToString() + t;
        }
        return s;
    }
}

结果如下:

Label cropped

如您所见,文字被裁剪,并且不会显示超过前100行。标签本身(黄色背景)很好,因为我强迫高度变大,否则标签的高度也将是相同的长度

所以,基本上如果你在标签上设置一个很长的文字,它只会展开以显示前100行,如果你通过HeightRequest手动改变它的高度,那么标签就可以了,但文字仍然会被剪裁。

这必须与ListView.Header实现有关。

1 个答案:

答案 0 :(得分:0)

在Android上,表单(null)return;,其中ListView的标头设置为ListView,其中包含您选择的android.widget.ListView

由于您使用的是表单'Container,这是一个Android VisualElement,因此在Android小部件类中内部设置了100行文本。尝试通过Forms的ListViewRenderer.cs容器OnMeasure方法设置高度不会覆盖它。

来自Label

TextView

如果真的需要在ListView标题中显示那么多文本而不创建自定义ListViewRender并手动操作该容器中TextView的SetLines,SetMinLines和SetMaxLines ,使用表单“ListViewRenderer.cs(已停用)代替您的标题int heightSpec = MeasureSpecFactory.MakeMeasureSpec((int)ctx.ToPixels(request.Request.Height), MeasureSpecMode.Exactly); _child.ViewGroup.Measure(widthMeasureSpec, heightMeasureSpec);

Editor

enter image description here

您还可以在VisualElement中嵌入标题已停用var label = new Editor { BackgroundColor = Color.Yellow, Text = genLongText(), MinimumHeightRequest = 10000, IsEnabled = false }; 并将其指定为Editor ScrollView,以便在ListView内滚动文字:

Header

enter image description here