android : fontFamily에 유효한 값과 그 값이 매핑되는 대상은 무엇입니까?


이 질문에 대한 답변 에서 사용자는 android:fontFamily 및 12 개의 변형 (아래 참조) 값을 나열합니다. 이 값들은 어디서 오는 것입니까? android:fontFamily 의 설명서는이 정보를 어느 위치 에나 나열하지 않습니다 ( 여기 , 여기 에서 확인 했습니다 ). 문자열은 여러 위치에있는 Android styles.xml 파일에 나열되어 있지만, 어떻게 Roboto 글꼴로 다시 매핑됩니까?

android 4.1 / 4.2부터 다음과 같은 Roboto 글꼴 제품군을 사용할 수 있습니다.

android:fontFamily="sans-serif"           // roboto regular  
android:fontFamily="sans-serif-light"     // roboto light  
android:fontFamily="sans-serif-condensed" // roboto condensed  
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)  
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

이것과 함께

android:textStyle="normal|bold|italic" 

12 가지 변형이 가능합니다 :

  • 정규병
  • 이탤릭체
  • 대담한
  • 굵은 기울임 꼴
  • 밝은 기울임 꼴
  • 얇은
  • 얇은 이탤릭체
  • 응축 된 정규병
  • 축약 이탤릭
  • 응축 된 굵은 글씨체
  • 응축 된 굵은 이탤릭

응용 프로그램의 styles.xml 파일에서 누군가를이 글꼴 패밀리로 나열 styles.xml 잘못된 것이라고 확신합니다.

<item name="android:fontFamily">Roboto-Regular.ttf</item>

우리 애플 리케이션의 테마를 올바르게 설정하고 (fontFamily를 올바르게 사용하는 것을 포함), 파일을보기 전에 생성 된 일부 스타일에있는 모든 중복을 제거하고 싶습니다.



Answers


이 값들은 어디서 오는 것입니까? android : fontFamily에 대한 문서는이 정보를 어떤 곳에도 나열하지 않습니다.

이들은 실제로 문서에 나와 있지 않습니다. 그러나 여기서는 '글꼴 모음'섹션에서 언급 합니다 . 이 문서에는 Android Jelly Bean 4.1에 대한 모든 새로운 공개 API가 나열되어 있습니다.

응용 프로그램의 styles.xml 파일에서 누군가를이 글꼴 패밀리로 나열 했으므로 잘못된 것이라고 확신합니다.

예, 잘못되었습니다. 글꼴 파일을 참조하지 않으므로 위에 링크 된 문서에서 언급 한 글꼴 이름을 사용해야합니다. 이 경우에는 다음과 같아야합니다.

<item name="android:fontFamily">sans-serif</item>

이미 설명한 링크 된 답변과 마찬가지로 12 가지 변형이 가능합니다.

Android Jelly Bean (4.1)에 추가됨 - API 16 :

일반 (기본값) :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item> 

기울임 꼴 :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">italic</item>

굵은 체 :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>

굵은 기울임 꼴 :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold|italic</item>

:

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>

밝은 기울임 꼴 :

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">italic</item>

얇음 :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">normal</item>

얇은 기울임 꼴 :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">italic</item>

응축 된 일반 :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">normal</item>

축약 이탤릭 :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">italic</item>

응축 된 굵은 글씨 :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>

응축 된 굵은 이탤릭체 :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>

Android Lollipop (v5.0)에 추가됨 - API 21 :

매체 :

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>

중간 기울임 꼴 :

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">italic</item>

검은 색 :

<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textStyle">italic</item>

빠른 참조를 위해 다음과 같이 모두 표시됩니다.




사용 가능한 글꼴 (Oreo 기준)

Material Design Typography 페이지에는 이러한 글꼴 중 일부에 대한 데모가 있으며 글꼴 및 스타일 선택에 대한 제안이 있습니다.

코드 fonts.xml : fonts.xml 은 안드로이드 폰트 목록입니다.

이러한 글꼴 사용

android:fontFamilyandroid:textStyle 속성을 설정합니다 android:fontFamily

<!-- Roboto Bold -->
<TextView
    android:fontFamily="sans-serif"
    android:textStyle="bold" />

이 표에서 원하는 값으로

Font                     | android:fontFamily          | android:textStyle
-------------------------|-----------------------------|-------------------
Roboto Thin              | sans-serif-thin             |
Roboto Light             | sans-serif-light            |
Roboto Regular           | sans-serif                  |
Roboto Bold              | sans-serif                  | bold
Roboto Medium            | sans-serif-medium           |
Roboto Black             | sans-serif-black            |
Roboto Condensed Light   | sans-serif-condensed-light  |
Roboto Condensed Regular | sans-serif-condensed        |
Roboto Condensed Medium  | sans-serif-condensed-medium |
Roboto Condensed Bold    | sans-serif-condensed        | bold
Noto Serif               | serif                       |
Noto Serif Bold          | serif                       | bold
Droid Sans Mono          | monospace                   |
Cutive Mono              | serif-monospace             |
Coming Soon              | casual                      |
Dancing Script           | cursive                     |
Dancing Script Bold      | cursive                     | bold
Carrois Gothic SC        | sans-serif-smallcaps        |

노토 산은 대체 글꼴이므로 직접 지정할 수 없습니다.

참고 : 이 표는 fonts.xml 에서 파생되었습니다. 각 글꼴의 성 및 스타일은 fonts.xml에 나열됩니다 (예 :

<family name="serif-monospace">
    <font weight="400" style="normal">CutiveMono.ttf</font>
</family>

serif-monospace 는 글꼴 패밀리이며 normal 은 스타일입니다.

적합성

fonts.xml 및 이전 system_fonts.xml로그 를 기반으로 각 글꼴이 추가 된 시간을 확인할 수 있습니다.

  • 아이스크림 샌드위치 : Roboto 정기, 굵게, 기울임 꼴 및 굵은 기울임 꼴
  • Jelly Bean : Roboto 조명, 밝은 기울임 꼴, 응축, 굵은 응축, 응축 이탤릭, 응축이 굵은 기울임 꼴
  • 젤리 MR1 : Roboto 얇고 얇은 이탤릭
  • 사탕 과자:
    • Roboto 매체, 중간 기울임 꼴, 검은 색 및 검은 색 이탤릭
    • 노토 리프 정기, 굵게, 기울임 꼴, 굵은 기울임 꼴
    • 성도 모노
    • 출시 예정
    • 댄싱 스크립트
    • Carrois 고딕 SC
    • 노토 산스
  • 오레오 MR1 : Roboto 압축 매체



내가 아는 한 xml이나 테마로 사용자 정의 글꼴을 선언 할 수는 없습니다. 나는 보통 인스턴스화시 자신의 글꼴을 설정하고 레이아웃 xml 파일에있는 글꼴을 사용하는 textview를 확장하는 사용자 정의 클래스를 만듭니다.

즉 :

public class Museo500TextView extends TextView {
    public Museo500TextView(Context context, AttributeSet attrs) {
        super(context, attrs);      
        this.setTypeface(Typeface.createFromAsset(context.getAssets(), "path/to/font.ttf"));
    }
}

<my.package.views.Museo900TextView
        android:id="@+id/dialog_error_text_header"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="12sp" />