目的に応じてテキストを使い分ける
それではまず、簡単なところから見ていきましょう。すでに解説した通り、React Native Paperには豊富なTypographyコンポーネントが存在します。リスト5で各コンポーネントを使ってみて、その挙動を確認します。
<Headline>Paper紹介</Headline> <Title>タイトル</Title> <Subheading>Typography</Subheading> <Paragraph>これが段落です。</Paragraph> <Paragraph>じゅげむじゅげむ ごこうのすりきれ {/*(略)*/}</Paragraph> <Caption>キャプションも書けます。</Caption> <Subheading>Button</Subheading> <Subheading>Card</Subheading>
これを実行してみると、図5のようになります。
アプリ内で見出しや説明文を書く用途であれば、十分な種類が用意されています。画面内のテキスト装飾の種類は、あまり増やさないほうが読みやすいので、基本的にはここにあるコンポーネントを使って、アプリ内のテキストを作っていくとよいでしょう。
なお、今回は使いませんでしたが、どのコンポーネントもText
コンポーネントと同じ項目のスタイルを指定できるので、アプリに合わせてカスタマイズしてください。
3つのボタン
次はボタンです。Material Designでは、ボタンは「Text Button」「Outlined Button」「Contained Button」のいずれかの姿で表示することになっています(図6)。
これらの姿は、それぞれReact Native Paperで再現されています。Toggle Buttonもありますが、形が違うので、React Native Paperでは別枠になりました。
では、どのような見た目になるのか見てみましょう。Main.js
に、リスト6の通り追記します。
<Subheading>Button</Subheading> <Button> ふつうのボタン(mode: text) </Button> <Button mode="contained"> containedなボタン </Button> <Button mode="outlined"> outlinedなボタン </Button>
これを実行すると、図7のようになります。
どれもきれいですね。Contained ButtonやOutlined Buttonは角丸になっていますが、これは第6回で触れたborderRadius
で実装されています。これはスタイルでカスタマイズが可能なので、試しにstyle={{ borderRadius: 12 }}
を付与してみましょう(図8)。
丸くなりました。前回までに学んだスタイルの知識は、ライブラリが提供するコンポーネントに対しても有効なので、出来合いのものを使うのが味気ないと感じた際は、どんどんカスタマイズしましょう。
カードで情報をまとめる
カードは、ある情報がひとまとまりのものであることを、視覚的に示せる表現方法です。Googleはこの表現をよく使っており、YouTubeアプリでの動画リストもその1つです。試しに、架空の動画のカードを作ってみましょう(リスト7)。
<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の通りになります。
どこかで見たことがある見た目になりましたね。こういったものを素早く作れるのが、ライブラリを利用する魅力です。
筆者が使う場合は、Card.Cover
やCard.Actions
を使わずに、タイトルと本文だけのカードを作ることも多いです。いろいろな組み合わせを試してみてください。
まとめ
今回は、スタイルを適用済みのコンポーネントを集めたライブラリとして、React Native Paperを解説しました。最終的に、図10の画面になりました。
これまでのサンプルよりは見栄えがするものになりました。これで1つの画面の中をきれいにすることはできそうです。次回は、複数の画面の間を行き来する方法について解説します。