You can place listview below of the entry:
In XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Entry
x:Name="entryMain"
Grid.Row="0"
TextChanged="OnEntryChanged" />
<ListView
x:Name="lstSuggest"
Grid.Row="1"
IsVisible="False"
ItemTapped="ItemSelected"
SeparatorVisibility="None" />
</Grid>
Code Behind:
lstSuggest.ItemsSource = _suggestion;
private void OnEntryChanged(object sender, TextChangedEventArgs e)
{
if (entryMain.Text != null && lstSuggest.ItemsSource != null)
{
if (_suggestion.Any(x=> x.StartsWith(e.NewTextValue)) && entryMain.Text != string.Empty)
{
var items = new List<string>();
foreach (var item in _suggestion.FindAll(x => x.StartsWith(e.NewTextValue)))
{
items.Add(item);
}
lstSuggest.ItemsSource = items;
lstSuggest.IsVisible = true;
}
else
{
lstSuggest.IsVisible = false;
}
}
}
private void ItemSelected(object sender, EventArgs args)
{
if (((ListView)sender).SelectedItem == null)
return;
entryMain.Text = lstSuggest.SelectedItem.ToString();
((ListView)sender).SelectedItem = null;
lstSuggest.IsVisible = false;
}
In addition, if you want remove listview horizontal scrollbar visibility, you can create custom control.
Bonus: Android default https://learn.microsoft.com/tr-tr/xamarin/android/user-interface/controls/auto-complete