Android 上 ListView 中所选项目的上下文菜单位置

Context menu position of selected item in a ListView on Android

我在 Android 平台上有一个 ListView,带有 Xamarin Forms。单击列表中的项目时,每个项目的上下文菜单都会出现一些选项;我正在使用模式 MVVM。球赛到此为止。

我想更改布局或菜单的显示方式。我希望上下文菜单在 UWP 中显示相同,作为所选项目上的弹出窗口,但在 Android 中,这是我正在使用的平台。 作为 shown here,是否只能在 UWP 或 Android 上使用自定义渲染或类似的东西才能拥有此视图?

如果您希望上下文菜单在所选项目上显示为弹出窗口,Xamarin.Forms DisplayActionSheet 方法可让您将此控件包含在跨平台应用程序中,从而在 Android 和带有弹出窗口的 UWP。

我做一个简单的例子供大家参考

型号:

 public class Person
{
    public string Name { get; set; }
    public string FirstName { get; set; }
    public int Age { get; set; }
}

视图模型:

public class PersonViewModel
{
    public ObservableCollection<Person> peoples { get; set; }
    public PersonViewModel()
    {
        peoples = new ObservableCollection<Person>()
        {
            new Person(){ Name = "A", FirstName ="a", Age =10 },
            new Person(){ Name = "B", FirstName ="b", Age =11 },
            new Person(){ Name = "C", FirstName ="c", Age =12 },
            new Person(){ Name = "D", FirstName ="d", Age =13 },
            new Person(){ Name = "E", FirstName ="e", Age =14 },
            new Person(){ Name = "F", FirstName ="f", Age =15 },
        };

    }
}

Xaml:

 <ListView ItemsSource="{Binding peoples}" ItemSelected="ListView_ItemSelected">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding Name}"></Label>
                    </ViewCell>
                </DataTemplate>                
            </ListView.ItemTemplate>
        </ListView>

后面的代码:

 public Page5()
    {
        InitializeComponent();
        this.BindingContext = new PersonViewModel();
    }

    private async void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var selectedItem = e.SelectedItem as Person;
        await DisplayActionSheet("Details Page:", "Cancel", null, selectedItem.FirstName, selectedItem.Age.ToString());
    }