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;
}
}
结果如下:
如您所见,文字被裁剪,并且不会显示超过前100行。标签本身(黄色背景)很好,因为我强迫高度变大,否则标签的高度也将是相同的长度。
所以,基本上如果你在标签上设置一个很长的文字,它只会展开以显示前100行,如果你通过HeightRequest手动改变它的高度,那么标签就可以了,但文字仍然会被剪裁。
这必须与ListView.Header实现有关。
答案 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
您还可以在VisualElement
中嵌入标题已停用var label = new Editor
{
BackgroundColor = Color.Yellow,
Text = genLongText(),
MinimumHeightRequest = 10000,
IsEnabled = false
};
并将其指定为Editor
ScrollView
,以便在ListView
内滚动文字:
Header