SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

UWPアプリを書けばiOS/Android/Webでも動く!?
~Uno Platform:クロスプラットフォーム開発環境

UWPアプリ開発の最前線 第15回

  • X ポスト
  • このエントリーをはてなブックマークに追加

プラットフォーム依存コード

 Uno PlatformがUWP互換APIを提供してくれるとはいうものの、まだすべてのAPIを完全にカバーできてはいません。例えば、本稿執筆時点では、WebViewコントロールはiOSとWebAssemblyでは上手く動かせませんでした。Windows 10のAcrylic(半透明)テーマを指定すると、UWP以外のプラットフォームでは実行時に例外を出して終了してしまいました。また逆に、UWPには存在しないプラットフォーム固有の機能を使いたいこともあるでしょう。

 そのようなプラットフォームに依存するコードが必要になるのは、クロスプラットフォーム開発の宿命ともいえます。

プラットフォーム依存のXAML

 プラットフォームのプレフィックスを付けることで、プラットフォームごとに異なるXAMLを定義できます。属性でも、要素そのものでも可能です。

 Pageタグの中に、例えば次のコードのようにしてプレフィックスを定義します。UWP以外の(つまり、Android/iOS/WebAssembyの、またはそれらを複合した)プレフィックスをmc:Ignorableのリストに忘れずに追加してください。利用できるプレフィックスの一覧は、「Platform-specific XAML markup in Uno」をご覧ください。

プラットフォームのプレフィックス定義を追加する
<Page x:Class="UF15.MainPage"
      ……省略……
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

      xmlns:win="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:not_win="http:/uno.ui/not_win"
      xmlns:android="http://uno.ui/android"
      xmlns:ios="http://uno.ui/ios"
      xmlns:wasm="http://uno.ui/wasm"

      mc:Ignorable="d not_win android ios wasm">

 上のプレフィックスを使って、例えば次のコードのようなXAMLが書けます。

プラットフォーム依存XAMLの例(MainPage.xaml
    <StackPanel>
      <TextBlock Margin="20" FontSize="30" Text="Hello, Uno !"
                 win:Foreground="DodgerBlue"
                 android:Foreground="LimeGreen"
                 ios:Foreground="BlueViolet"
                 wasm:Foreground="OrangeRed"
                 />
      <win:AppBarButton Icon="People" Label="UWP" />
      <not_win:Button Margin="20,0" 
                      android:Content="Android"
                      ios:Content="iOS"
                      wasm:Content="WebAssembly"/>
    </StackPanel>

 上のXAMLでは、TextBlockのForeground(=文字色)をプラットフォームごとに変えています。また、UWPではAppBarButtonを表示し、それ以外のプラットフォームでは普通のButtonにしています(AppBarButtonのシンボルアイコンはUWPだけで有効です)。そのButtonに表示する文字も、プラットフォームごとに変えています。実行すると次の画像のようになります。

プラットフォーム依存XAMLの実行例
プラットフォーム依存XAMLの実行例

 なお現在のところ、AndroidやiOSのネイティブコントロールをXAMLで記述することはできないようです。次に説明するパーシャルクラスを使ってC#のコードで実装します。詳しくは「Platform-specific C# code in Uno」をご覧ください。

次のページ
プラットフォーム依存のC#コード

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11795 2019/11/13 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング