SHOEISHA iD

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

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

基礎からはじめるReact Native入門

UIライブラリで美しいデザインを手軽に利用する

基礎からはじめるReact Native入門 第8回


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

目的に応じてテキストを使い分ける

 それではまず、簡単なところから見ていきましょう。すでに解説した通り、React Native Paperには豊富なTypographyコンポーネントが存在します。リスト5で各コンポーネントを使ってみて、その挙動を確認します。

[リスト5]Main.js
<Headline>Paper紹介</Headline>
<Title>タイトル</Title>
<Subheading>Typography</Subheading>
<Paragraph>これが段落です。</Paragraph>
<Paragraph>じゅげむじゅげむ ごこうのすりきれ {/*(略)*/}</Paragraph>
<Caption>キャプションも書けます。</Caption>
<Subheading>Button</Subheading>
<Subheading>Card</Subheading>

 これを実行してみると、図5のようになります。

図5:テキストの表示
図5:テキストの表示

 アプリ内で見出しや説明文を書く用途であれば、十分な種類が用意されています。画面内のテキスト装飾の種類は、あまり増やさないほうが読みやすいので、基本的にはここにあるコンポーネントを使って、アプリ内のテキストを作っていくとよいでしょう。

 なお、今回は使いませんでしたが、どのコンポーネントもTextコンポーネントと同じ項目のスタイルを指定できるので、アプリに合わせてカスタマイズしてください。

3つのボタン

 次はボタンです。Material Designでは、ボタンは「Text Button」「Outlined Button」「Contained Button」のいずれかの姿で表示することになっています(図6)。

図6:ボタンの種類(公式ドキュメントより引用)
図6:ボタンの種類(公式ドキュメントより引用)

 これらの姿は、それぞれReact Native Paperで再現されています。Toggle Buttonもありますが、形が違うので、React Native Paperでは別枠になりました。

 では、どのような見た目になるのか見てみましょう。Main.jsに、リスト6の通り追記します。

[リスト6]Main.js
<Subheading>Button</Subheading>
<Button>
  ふつうのボタン(mode: text)
</Button>
<Button mode="contained">
  containedなボタン
</Button>
<Button mode="outlined">
  outlinedなボタン
</Button>

 これを実行すると、図7のようになります。

図7:ボタンの種類
図7:ボタンの種類

 どれもきれいですね。Contained ButtonやOutlined Buttonは角丸になっていますが、これは第6回で触れたborderRadiusで実装されています。これはスタイルでカスタマイズが可能なので、試しにstyle={{ borderRadius: 12 }}を付与してみましょう(図8)。

図8:borderRadiusを12にしたボタン
図8:borderRadiusを12にしたボタン

 丸くなりました。前回までに学んだスタイルの知識は、ライブラリが提供するコンポーネントに対しても有効なので、出来合いのものを使うのが味気ないと感じた際は、どんどんカスタマイズしましょう。

カードで情報をまとめる

 カードは、ある情報がひとまとまりのものであることを、視覚的に示せる表現方法です。Googleはこの表現をよく使っており、YouTubeアプリでの動画リストもその1つです。試しに、架空の動画のカードを作ってみましょう(リスト7)。

[リスト7]Main.js
<Subheading>Card</Subheading>
<Card>
  <Card.Cover source={require('../assets/ramen.jpg')} />{/*(1)*/}
  {/*(2)*/}
  <Card.Title
    title="ラーメン紀行 2日目"
    subtitle="炎のラーメンチャンネル"
    left={props => <Avatar.Text {...props} label="YN" />} />{/*(3)*/}
  <Card.Content>{/*(4)*/}
    <Paragraph>
      とうとうこの伝説のお店にやってきました。
    </Paragraph>
  </Card.Content>
  <Card.Actions style={{ justifyContent: 'flex-end' }}>{/*(5)*/}
    <Button>見ない</Button>
    <Button mode="contained">見る</Button>
  </Card.Actions>
</Card>

 (1)のCard.Coverは、カバー画像と呼ばれる、サムネイルなどを表示する領域です。Imageコンポーネントと同等のsource属性が必須なので、assetsフォルダに配置した画像を読み込ませています。

 (2)のCard.Titleで、カードのタイトルを指定できます。このコンポーネントは高機能で、タイトルの表示だけではなく、サブタイトルの表示や(3)のアイコンの表示までこなします。

 何か本文を書きたい場合は、(4)のCard.Contentを使います。(5)のCard.Actionsは、カードの情報に対して何らかの操作を求める場合に、Buttonと併用して使います。標準のスタイルでは左寄せになるので、justifyContent: 'flex-end'を与えて右寄せにしました。これを実行すると、図9の通りになります。

図9:YouTube風のカード
図9:YouTube風のカード

 どこかで見たことがある見た目になりましたね。こういったものを素早く作れるのが、ライブラリを利用する魅力です。

 筆者が使う場合は、Card.CoverCard.Actionsを使わずに、タイトルと本文だけのカードを作ることも多いです。いろいろな組み合わせを試してみてください。

まとめ

 今回は、スタイルを適用済みのコンポーネントを集めたライブラリとして、React Native Paperを解説しました。最終的に、図10の画面になりました。

図10:今回の成果物
図10:今回の成果物

 これまでのサンプルよりは見栄えがするものになりました。これで1つの画面の中をきれいにすることはできそうです。次回は、複数の画面の間を行き来する方法について解説します。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
基礎からはじめるReact Native入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 中川幸哉(ナカガワユキヤ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/12087 2020/04/03 16:37

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング