可选的拆分字符串 ascii 字符

optional split string ascii char

是否有 ascii 字符(不可打印)来建议在需要时在何处拆分字符串。这是为了在单元格中正确显示,即使在屏幕旋转时也是如此。在此示例中,我使用 5x2 网格中的按钮。

因此,如果屏幕是垂直的,当文本被换行以适合单元格时,“powerslave”将更改为“power slave”。

例如。 “斯大林格勒”不适合牢房,所以我想要 垂直屏幕时“staling grad”。

我想将它用于 xamarin android 应用程序。现在 xamarin (4.8) 使 “stalingra d”或“powerslav e”。我没有任何控制权,因为没有环绕反馈。

是的,可以根据设备Orientation的方向改变上面CollectionView的数据源。

首先,关于如何检测设备的方向,您可以在您的页面中覆盖方法OnSizeAllocated

    protected override void OnSizeAllocated(double width, double height)
    {
        base.OnSizeAllocated(width, height);

        if (Height > Width)
        {
            viewModel.LoadPortraitData();
        }
        else {
            viewModel.LoadLandscapeData();
        }
    }

有关更多信息,请查看 Device Orientation

其次,根据您的需要,我们可以使用CollectionView来显示字符串列表。我们可以通过将其 ItemsLayout 属性 设置为 VerticalGrid.

来在垂直网格中显示其项目
  <CollectionView ItemsLayout="VerticalGrid, 2"  
                    ItemsSource="{Binding items}">

我做了一个简单的demo,你可以参考下面的代码:

<StackLayout Margin="20">
    <CollectionView ItemsLayout="VerticalGrid, 2"  
                    ItemsSource="{Binding items}">
    
    </CollectionView>
</StackLayout>

VerticalGridTextPage.xaml.cs的代码:

public partial class VerticalGridTextPage : ContentPage
{

    MyViewModel viewModel;

    public VerticalGridTextPage()
    {
        InitializeComponent();

        viewModel = new MyViewModel();
        this.BindingContext = viewModel;
    }

    protected override void OnSizeAllocated(double width, double height)
    {
        base.OnSizeAllocated(width, height);

        if (Height > Width)
        {
            viewModel.LoadPortraitData();
        }
        else {
            viewModel.LoadLandscapeData();
        }
    }
}

MyViewModel.cs

public class MyViewModel
{
    public ObservableCollection<string> items { get; set; } = new ObservableCollection<string>();


    public void LoadLandscapeData()
    {
        items.Clear();

        items.Add("power  slave");
        items.Add("staling   grad");
    }

    public void LoadPortraitData() {
        items.Clear();
        items.Add("powerslave");
        items.Add("stalinggrad");
    }

    public MyViewModel() {
        LoadPortraitData();
    }
}

更多信息,请查看:Vertical grid

我认为唯一可以用 xamarin 形式包装文本的字符是 0x20 space 字符。

所以,我更新了一个TTF字体。我 0x20 复制 space 到下划线并将 space 字符 0x20 修改为 0 水平宽度。

如何使用我在这里找到的自定义堡垒(来自 Gerald Versluis)。

现在我可以解析任何文本了。将任何“”替换为“_”,只要允许换行,我就可以使用“”。

        <Button Grid.Row="0" Grid.Column="0" Text="Aces_ High" />
        <Button Grid.Row="0" Grid.Column="1" Text="Agents_ of_ Steel" />
        <Button Grid.Row="1" Grid.Column="0" Text="Break ing_ the_ Law" />
        <Button Grid.Row="1" Grid.Column="1" Text="Fast_ as_ a_ Shark" />
        <Button Grid.Row="2" Grid.Column="0" Text="fht_ Bells_ Tolls" />
        <Button Grid.Row="2" Grid.Column="1" Text="Holy_ Diver" />
        <Button Grid.Row="3" Grid.Column="0" Text="Mad_ House" />
        <Button Grid.Row="3" Grid.Column="1" Text="Power slave" />
        <Button Grid.Row="4" Grid.Column="0" Text="Symp_ of_ De struct ion"  />
        <Button Grid.Row="4" Grid.Column="1" Text="Stalin grad" />
        <Button Grid.Row="5" Grid.Column="0" Text="t_ Number_ ot_ Beast" />
        <Button Grid.Row="5" Grid.Column="1" Text="Stop" />

然后我得到这个结果。实际上,我希望这个功能会出现在 xamarin 平台中。