XamarinCommunityToolkit
XamarinCommunityToolkit copied to clipboard
[Bug] TabViewItem content in TabView height is constrained using Android WindowSoftInputMode AdjustResize
Description
TabViews are not resizing properly when on Android SoftInputMode is AdjustResize
Stack Trace
Link to Reproduction Sample
Steps to Reproduce
-
Call this in Xamarin Community Toolkit Sample app
Forms.PlatformConfiguration.AndroidSpecific.Application.SetWindowSoftInputModeAdjust(this, Forms.PlatformConfiguration.AndroidSpecific.WindowSoftInputModeAdjust.Resize); -
Modify one of the TabView sample pages to have a tab with a lot of items. I used the GettingStartedPage (Clear out all content in the Xaml file)
using Xamarin.Forms;
namespace Xamarin.CommunityToolkit.Sample.Pages.Views.TabView
{
public partial class GettingStartedPage : BasePage
{
public GettingStartedPage()
{
Content = GetContent();
InitializeComponent();
}
UI.Views.TabView GetContent()
{
var tabView = new UI.Views.TabView()
{
IsTabTransitionEnabled = false,
IsSwipeEnabled = false
};
tabView.TabItems.Add(new UI.Views.TabViewItem()
{
TabWidth = 60,
Text = $"Tab 1",
FontAttributesSelected = FontAttributes.Italic,
TextColorSelected = Color.Red,
Content = GetBigContent()
});
return tabView;
}
ScrollView GetBigContent()
{
var content = new ScrollView();
var stack = new StackLayout();
stack.Children.Add(new Grid() { HeightRequest = 150, Children = { new Label() { Text = "Tap here to dismiss keyboard", HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center } } });
stack.Children.Add(new Entry() { Text = "Item 1" });
stack.Children.Add(new Entry() { Text = "Item 2" });
stack.Children.Add(new Entry() { Text = "Item 3" });
stack.Children.Add(new Entry() { Text = "Item 4" });
stack.Children.Add(new Entry() { Text = "Item 5" });
stack.Children.Add(new Entry() { Text = "Item 6" });
stack.Children.Add(new Entry() { Text = "Item 7" });
stack.Children.Add(new Entry() { Text = "Item 8" });
stack.Children.Add(new Entry() { Text = "Item 9" });
stack.Children.Add(new Entry() { Text = "Item 10" });
stack.Children.Add(new Entry() { Text = "Item 11" });
stack.Children.Add(new Entry() { Text = "Item 12" });
stack.Children.Add(new Entry() { Text = "Item 13" });
stack.Children.Add(new Entry() { Text = "Item 14" });
stack.Children.Add(new Entry() { Text = "Item 15" });
stack.Children.Add(new Entry() { Text = "Item 16" });
stack.Children.Add(new Entry() { Text = "Item 17" });
stack.Children.Add(new Entry() { Text = "Item 18" });
stack.Children.Add(new Entry() { Text = "Item 19" });
stack.Children.Add(new Entry() { Text = "Item 20" });
stack.Children.Add(new Entry() { Text = "Item 21" });
stack.Children.Add(new Entry() { Text = "Item 22" });
stack.Children.Add(new Entry() { Text = "Item 23" });
stack.Children.Add(new Entry() { Text = "Item 24" });
stack.Children.Add(new Entry() { Text = "Item 25" });
stack.Children.Add(new Entry() { Text = "Item 26" });
stack.Children.Add(new Entry() { Text = "Item 27" });
stack.Children.Add(new Entry() { Text = "Item 28" });
content.Content = stack;
return content;
}
}
}
- Run the app and navigate to the tab view sample page you modified
- Click on one of the entries
- Tap the dismiss label at the top
Expected Behavior
Things should resize correctly
Actual Behavior
There is space where the keyboard was that is now blank
Basic Information
- Version with issue: 2.0.1
- Last known good version: Unknown
- IDE: Visual studio
- Platform Target Frameworks:
- Android: 11
- Android Support Library Version: Unknown
- Nuget Packages:
- Affected Devices:
Workaround
tabView.SizeChanged += TabView_SizeChanged;
void TabView_SizeChanged(object sender, System.EventArgs e)
{
if (sender is UI.Views.TabView tabView && tabView.SelectedIndex > -1)
{
var tab = tabView.TabItems[tabView.SelectedIndex];
if (tab?.CurrentContent != null)
tab.CurrentContent.Layout(tabView.Bounds);
}
}
Reproduction imagery
