Xamarin、Xamarin.Forms、C#プラットフォームは初めてです。
私はこれらのテクノロジーでいくつかの実験を行っており、コード共有のためにPCLプロジェクトでXamarin.Formsのプラットフォーム固有のUIコンポーネントを使用する方法を探しています。
Webで検索すると、FABボタンの実装がいくつか見つかりました(例)が、これらの実装は非推奨または廃止されています。
ネイティブコントロールをXamarin.Formsに埋め込むことが可能であることは知っていますが、このアプローチではSAPプロジェクトを使用しています...
私の質問は次のとおりです。コード共有用のPCLプロジェクトでXamarin.FormsソリューションにFABボタン(または他のプラットフォーム固有のUIコントロール)を使用する方法はありますか?はいの場合、他のプラットフォームでの動作はどうなりますか?iOSUIにFABボタンが表示されないことを願っています。
助けてくれてありがとう。
ここではサードパーティのライブラリを提案しませんが、通常はカスタムレンダラーを使用してPCLからターゲットプラットフォームのネイティブコントロールを使用できます。
FloatingActionButton Androidプラットフォームの、ビューレンダラを実装しようとすることができます。
たとえば、PCLでMyFloatButton
:という名前のクラスを作成します。
public class MyFloatButton : View
{
}
次に、AndroidプロジェクトでMyFloatButtonRenderer
、たとえば次のような名前の別のクラスを作成します。
[assembly: ExportRenderer(typeof(MyFloatButton), typeof(MyFloatButtonRenderer))]
namespace NameSpace.Droid
{
public class MyFloatButtonRenderer : Xamarin.Forms.Platform.Android.ViewRenderer<MyFloatButton, FloatingActionButton>
{
private FloatingActionButton fab;
protected override void OnElementChanged(ElementChangedEventArgs<MyFloatButton> e)
{
base.OnElementChanged(e);
if (Control == null)
{
fab = new FloatingActionButton(Xamarin.Forms.Forms.Context);
fab.LayoutParameters = new LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
fab.Clickable = true;
fab.SetImageDrawable(Resources.GetDrawable(Resource.Drawable.icon));
SetNativeControl(fab);
}
if (e.NewElement != null)
{
fab.Click += Fab_Click;
}
if (e.OldElement != null)
{
fab.Click -= Fab_Click;
}
}
private void Fab_Click(object sender, EventArgs e)
{
}
}
}
iOSUIにFABボタンが表示されないことを願っています。
このコントロールをAndroidプラットフォームでのみ表示する場合は、たとえば、ページのPCLのxamlに次のようにコーディングできます。
<OnPlatform x:TypeArguments="View">
<OnPlatform.Android>
<local:MyFloatButton WidthRequest="50" HeightRequest="50" HorizontalOptions="Center" />
</OnPlatform.Android>
<OnPlatform.iOS>
<!--use other view here-->
</OnPlatform.iOS>
</OnPlatform>
または、このコントロールをコードビハインドに追加することを確認してください。このブログを確認してください:Xamarin.Formsへのネイティブコントロールの埋め込み
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加