Is there a way to show an activity indicator while Page content view is rendering or loading?
we need to create service name ILodingPageService interface in PCL.
public interface ILodingPageService
{
void InitLoadingPage(ContentPage loadingIndicatorPage = null);
void ShowLoadingPage();
void HideLoadingPage();
}
2.creating Transparent Page to display Activity indicator.
<ContentPage.Content>
<StackLayout
Padding="30"
BackgroundColor="Black"
HorizontalOptions="Center"
VerticalOptions="Center">
<ActivityIndicator IsRunning="True" Color="White" />
<Label
FontAttributes="Bold"
Text="Loading..."
TextColor="White" />
</StackLayout>
</ContentPage.Content>
3.implement ILodingPageService interface in Android platform.
[assembly: Xamarin.Forms.Dependency(typeof(LodingPageServiceDroid))]
namespace IndicatorApp.Droid
{
public class LodingPageServiceDroid : ILodingPageService
{
private Android.Views.View _nativeView;
private Dialog _dialog;
private bool _isInitialized;
public void HideLoadingPage()
{
// Hide the page
_dialog.Hide();
}
public void InitLoadingPage(ContentPage loadingIndicatorPage = null)
{
// check if the page parameter is available
if (loadingIndicatorPage != null)
{
// build the loading page with native base
loadingIndicatorPage.Parent = Xamarin.Forms.Application.Current.MainPage;
loadingIndicatorPage.Layout(new Rectangle(0, 0,
Xamarin.Forms.Application.Current.MainPage.Width,
Xamarin.Forms.Application.Current.MainPage.Height));
var renderer = loadingIndicatorPage.GetOrCreateRenderer();
_nativeView = renderer.View;
_dialog = new Dialog(CrossCurrentActivity.Current.Activity);
_dialog.RequestWindowFeature((int)WindowFeatures.NoTitle);
_dialog.SetCancelable(false);
_dialog.SetContentView(_nativeView);
Window window = _dialog.Window;
window.SetLayout(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);
window.ClearFlags(WindowManagerFlags.DimBehind);
window.SetBackgroundDrawable(new ColorDrawable(Android.Graphics.Color.Transparent));
_isInitialized = true;
}
}
public void ShowLoadingPage()
{
// check if the user has set the page or not
if (!_isInitialized)
InitLoadingPage(new LoadingIndicatorPage1()); // set the default page
// showing the native loading page
_dialog.Show();
}
}
internal static class PlatformExtension
{
public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable)
{
var renderer = XFPlatform.GetRenderer(bindable);
if (renderer == null)
{
renderer = XFPlatform.CreateRendererWithContext(bindable, CrossCurrentActivity.Current.Activity);
XFPlatform.SetRenderer(bindable, renderer);
}
return renderer;
}
}
}
I create new simple at githun, you can download it.
https://github.com/CherryBu/activityindicator
If my reply solve your issue, please remember to mark answer for my reply, thanks.
The screenshot is here:
