<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hayward_kim.log</title>
        <link>https://velog.io/</link>
        <description>방구석 개발자, KDMHS 22TH</description>
        <lastBuildDate>Wed, 18 Oct 2023 01:16:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hayward_kim.log</title>
            <url>https://velog.velcdn.com/images/hayward_kim/profile/29d37633-32b1-4295-8867-6e23eeec3c00/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hayward_kim.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hayward_kim" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[React Native에서 Material Symbols 사용하기]]></title>
            <link>https://velog.io/@hayward_kim/react-native-material-symbols</link>
            <guid>https://velog.io/@hayward_kim/react-native-material-symbols</guid>
            <pubDate>Wed, 18 Oct 2023 01:16:45 GMT</pubDate>
            <description><![CDATA[<h1 id="서론">서론</h1>
<blockquote>
<p>이 방법은 제가 이틀 동안 웹 서핑을 진행하여 간신히 찾은 방법입니다. <em><strong>칭찬해주세요.</strong></em>
이와 관련한 npm 패키지를 제작중이나, 완성까지는 시간이 오래 걸릴 것 같습니다.</p>
</blockquote>
<blockquote>
<h3 id="참고">참고</h3>
<p>이 방법은 제가 찾은 임의의 방법으로 Material Symbols를 사용하는 올바른 방법이 아닐 수도 있습니다.</p>
</blockquote>
<h1 id="본론">본론</h1>
<h3 id="파일-다운로드">파일 다운로드</h3>
<blockquote>
<p><a href="https://drive.google.com/drive/folders/1DFb1meg8-WgmF2xzSekLloVzFmhL7-SD?usp=sharing">구글 드라이브</a>에서 Icon Style에 따라 ...Normal.ttf 와 ...Filled.ttf 파일 두개를 다운로드 받아줍니다.<img src="https://velog.velcdn.com/images/hayward_kim/post/9cded8ca-72d2-44e5-8cd7-6ae8a976f6d8/image.png" alt=""></p>
</blockquote>
<p>ex) Material Symbols Outlined를 사용하신다면,
MaterialSymbolsOutlinedNormal.ttf와 MaterialSymbolsOutlinedFilled.ttf를 다운받아줍니다.</p>
<p>ps) 구글 드라이브 글자가 링크 입니다~ 안보이시는 분들은
<code>https://drive.google.com/drive/folders/1DFb1meg8-WgmF2xzSekLloVzFmhL7-SD?usp=sharing</code>
로 가주세요~</p>
<h3 id="어셋-설정-자세한-설명">어셋 설정 <a href="https://velog.io/@upship-kim/React-Native-%ED%8F%B0%ED%8A%B8-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95">[자세한 설명]</a></h3>
<blockquote>
<p>프로젝트 폴더 최상단에 &quot;<em><strong>assets</strong></em>&quot; 폴더를 만듭니다.
<img src="https://velog.velcdn.com/images/hayward_kim/post/87555eb7-655a-4e08-8441-87ef2551c308/image.png" alt="">내부에 fonts 폴더를 만듭니다.<img src="https://velog.velcdn.com/images/hayward_kim/post/371a9b0c-919b-48e8-bce1-d0a70d6a58c4/image.png" alt="">fonts 폴더 안에 다운로드 받은 파일을 넣어주세요, 저는 Material Symbols Rounded를 사용하였습니다.
<em><strong>! 아래 보이는 SUIT와 같이 다른 폰트 파일과 같이 존재해도 됩니다 !</strong></em>
<img src="https://velog.velcdn.com/images/hayward_kim/post/fa64df7d-ffea-4a46-8976-17d3ba20f156/image.png" alt="">프로젝트 폴더 최상단에 <strong><em>react-native.config.js</em></strong> 파일을 생성합니다.
<img src="https://velog.velcdn.com/images/hayward_kim/post/2834ecc8-28dd-4fe4-86e0-5c4b59129e3d/image.png" alt=""><strong><em>react-native.config.js</em></strong> 파일을 열고, 아래 코드를 추가합니다.
<code>assets: [&#39;./assets/fonts/&#39;],</code><img src="https://velog.velcdn.com/images/hayward_kim/post/3a3694e3-42bc-4f33-b73a-b98aa388c137/image.png" alt="">
터미널로 프로젝트 폴더로 이동한 다음
아래 명령어를 입력해주세요
<code>npx react-native-asset</code>
<img src="https://velog.velcdn.com/images/hayward_kim/post/56fd5fa0-563d-4d79-9d38-22aedad86470/image.png" alt="">잘 실행되면 아무것도 안뜨거나 로그만 대충 나옵니다. 에러만 안뜨면 어셋 설정까지는 완료입니다!<img src="https://velog.velcdn.com/images/hayward_kim/post/b1a03995-d0e7-4d72-852e-8dc166c14d57/image.png" alt=""></p>
</blockquote>
<h3 id="사용하기">사용하기</h3>
<blockquote>
<p>프로젝트 폴더의 적당한 곳에 <code>icon.tsx</code> 파일을 만들어줍시다, 저는 utils 폴더로 했는데, 어디로 하던 상관없습니다.
<img src="https://velog.velcdn.com/images/hayward_kim/post/f80215b0-4a44-4036-b1f7-a4a4a0830794/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>파일 안에 아래 코드를 복붙해주시면 됩니다.</p>
</blockquote>
<pre><code>import React from &#39;react&#39;;
import {Text, TextStyle, View} from &#39;react-native&#39;;
import Color from &#39;./color&#39;;

export interface IconProps {
  icon: string;
  size?: number;
  fill?: boolean;
  weight?: TextStyle[&#39;fontWeight&#39;];
  color?: string;
}

export const Icon = ({
  icon,
  size = 24,
  fill = false,
  weight = &#39;400&#39;,
  color = Color.black,
}: IconProps): JSX.Element =&gt; {
  return (
    &lt;View
      style={{
        flex: 0,
        width: size,
        height: size,
        overflow: &#39;hidden&#39;,
        justifyContent: &#39;center&#39;,
        alignItems: &#39;center&#39;,
      }}&gt;
      &lt;Text
        style={{
          // import font as PostScript
          fontFamily: fill
            ? &#39;MaterialSymbolsRounded-Filled&#39;
            : &#39;MaterialSymbolsRounded-Normal&#39;,
          fontSize: size,
          fontWeight: weight,
          color: color,
          lineHeight: size * 1.1,
        }}&gt;
        {icon}
      &lt;/Text&gt;
    &lt;/View&gt;
  );
};</code></pre><blockquote>
<p>대충 이렇게 보입니다.
<img src="https://velog.velcdn.com/images/hayward_kim/post/f596a99d-6741-48a4-a4d3-8b67d79a8372/image.png" alt=""></p>
</blockquote>
<h3 id="-여기서-rounded가-아닌-다른-스타일을-쓸-분은-">! 여기서 Rounded가 아닌 다른 스타일을 쓸 분은 !</h3>
<p><img src="https://velog.velcdn.com/images/hayward_kim/post/6259beef-3bcb-4f43-a626-8a4b3c416637/image.png" alt=""></p>
<h3 id="-본인의-스타일대로-변경해야합니다-">! 본인의 스타일대로 변경해야합니다 !</h3>
<h4 id="material-symbols-outlined">Material Symbols Outlined<img src="https://velog.velcdn.com/images/hayward_kim/post/58fc8c9a-cda4-46e7-8634-7dea809d1c63/image.png" alt=""></h4>
<h4 id="material-symbols-sharp">Material Symbols Sharp<img src="https://velog.velcdn.com/images/hayward_kim/post/1d7002e3-e99b-46dc-9a52-5106635fade4/image.png" alt=""></h4>
<blockquote>
</blockquote>
<p>먼저 <a href="https://fonts.google.com/icons">https://fonts.google.com/icons</a> 에 가서 
<img src="https://velog.velcdn.com/images/hayward_kim/post/1b6bbe23-1d36-443b-8c7d-cb61186c36b1/image.png" alt="">
원하시는 아이콘을 찾으신 후
<img src="https://velog.velcdn.com/images/hayward_kim/post/0f0067e0-ece8-4089-93b1-287b5b7a7896/image.png" alt="">
사용하실 파일로 가서 
<img src="https://velog.velcdn.com/images/hayward_kim/post/d4f95158-827e-4fcf-a170-a8b21b01a124/image.png" alt="">
import 한 후
<code>&lt;Icon icon=&quot;home&quot; fill={true} size={24} weight=&quot;400&quot; color=&quot;white&quot; /&gt;</code>
<img src="https://velog.velcdn.com/images/hayward_kim/post/48723929-5a6c-4589-9408-ffe590a3476d/image.png" alt="">
이처럼 코드를 작성하시면
<img src="https://velog.velcdn.com/images/hayward_kim/post/b33f6f2e-1eee-4847-87c6-7e3ffa468670/image.png" alt="">
요로코롬 작동하는걸 보실 수 있습니다.</p>
<h3 id="참고-1">참고</h3>
<p><code>icon</code> :  아이콘 이름 <code>string</code>
<code>fill</code> : 아이콘 채우기 스타일 <code>boolean</code>
<code>size</code> : 아이콘 크기 <code>number</code>
<code>weight</code> : 아이콘 두께 <code>&quot;100&quot; | &quot;200&quot; | ... &quot;800&quot; | &quot;900&quot;</code>
<code>color</code> : 아이콘 색상 <code>string</code></p>
<h1 id="결론">결론</h1>
<blockquote>
<p>제가 정말 며칠동안 검색을 하며 찾은 방법이긴 하나 사실 원래는 저 TTF 파일 안에 Normal과 Fill 옵션이 다 있습니다.
만약 home 아이콘에 fill 옵션을 넣고 싶다면 home.fill 로 사용하면 되는데, text로 아이콘을 불러오기 때문에 home.fill을 하면 home 아이콘과 .fill 글자만 뜹니다.
<img src="https://velog.velcdn.com/images/hayward_kim/post/e17cf1aa-318a-4f8f-ad7b-a9b2dc7b2dbd/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>무튼 앞서 말했듯이 npm 패키지를 만들고 있긴하나, 네이티브 코드를 작성하려면 시간이 많이 걸릴 것 같아 커스텀 폰트를 네이티브로 불러와서 라이브러리로 사용하는 방법을 아시는 분께서는 <a href="mailto:hayward2007@naver.com">hayward2007@naver.com</a> 으로 연락을 주시면 감사하겠습니다.</p>
</blockquote>
<blockquote>
<p>실제 사용 사례 보기 : <a href="https://github.com/hanpoon/hanpoon-frontend">https://github.com/hanpoon/hanpoon-frontend</a></p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>