何らかの待ち時間が発生するような処理を行う場合、処理中である事を示す為にローディングアイコンなどを表示する事が多い。
Xamarin でアプリケーションの開発を行う場合に何か良いものは無いかと探してみたところ、Xamarin.Forms.ActivityIndicator を利用すると良いという事がわかったので使ってみた。
https://developer.xamarin.com/api/type/Xamarin.Forms.ActivityIndicator/C# で書くならこんな感じ。
var loadingIndicator = new ActivityIndicator{
IsRunning = true,
};
xaml だとこんな感じ。
<ActivityIndicator Color="Red" IsRunning="true" />
表示はプラットフォーム毎に異なる。
Android だとでかい?
もちろんインジケーターを常時表示しっぱなしなんて事は無いので以下のような感じでトグルさせてみた。
public ActivityIndicator loadingIndicator = new ActivityIndicator();
private void DisplayLoading()
{
if (loadingIndicator.IsRunning)
{
loadingIndicator.IsRunning = false;
loadingIndicator.IsVisible = false;
}
else {
loadingIndicator.VerticalOptions = LayoutOptions.CenterAndExpand;
loadingIndicator.HeightRequest = 100;
loadingIndicator.IsRunning = true;
loadingIndicator.IsVisible = true;
}
}
public GetMainPage()
{
// 略
DisplayLoading();
SugokuJikanNoKakaruShori();
Content = new StackLayout
{
VerticalOptions = LayoutOptions.FillAndExpand,
Orientation = StackOrientation.Vertical,
Children = {
loadingIndicator,
feedItemsList,
},
};
}
public async void SugokuJikanNoKakaruShori()
{
// 省略
Displayloading();
}
ちなみに上記のような ListView でローディングを表示するのであればわざわざ ActivityIndicator を利用せずとも ListView.IsRefreshing の値を true/false にするだけで表示/非表示切り替えられる。
しかし、どちらにしても見た目が寂しいので何か自前で実装したいなぁという気もする。