2017-10-05 4 views
4

Fonts in XML 기능을 사용하면 글꼴 패밀리에 다양한 글꼴 가중치를 지정할 수 있습니다. 예를 들면 다음과 같습니다.XML의 글꼴에 대해 지정된 가중치를 사용하는 방법

<?xml version="1.0" encoding="utf-8"?> 
<font-family xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <font android:font="@font/archivo_narrow_regular" android:fontWeight="400" android:fontStyle="normal" 
     app:font="@font/archivo_narrow_regular" app:fontWeight="400" app:fontStyle="normal"/> 

    <font android:font="@font/archivo_narrow_regular_italic" android:fontWeight="400" android:fontStyle="italic" 
     app:font="@font/archivo_narrow_regular_italic" app:fontWeight="400" app:fontStyle="italic"/> 

    <font android:font="@font/archivo_narrow_medium" android:fontWeight="500" android:fontStyle="normal" 
     app:font="@font/archivo_narrow_medium" app:fontWeight="500" app:fontStyle="normal"/> 

    <font android:font="@font/archivo_narrow_medium_italic" android:fontWeight="500" android:fontStyle="italic" 
     app:font="@font/archivo_narrow_medium_italic" app:fontWeight="500" app:fontStyle="italic"/> 

    <font android:font="@font/archivo_narrow_semibold" android:fontWeight="600" android:fontStyle="normal" 
     app:font="@font/archivo_narrow_semibold" app:fontWeight="600" app:fontStyle="normal"/> 

    <font android:font="@font/archivo_narrow_semibold_italic" android:fontWeight="600" android:fontStyle="italic" 
     app:font="@font/archivo_narrow_semibold_italic" app:fontWeight="600" app:fontStyle="italic"/> 

    <font android:font="@font/archivo_narrow_bold" android:fontWeight="700" android:fontStyle="normal" 
     app:font="@font/archivo_narrow_bold" app:fontWeight="700" app:fontStyle="normal"/> 

    <font android:font="@font/archivo_narrow_bold_italic" android:fontWeight="700" android:fontStyle="italic" 
     app:font="@font/archivo_narrow_bold_italic" app:fontWeight="700" app:fontStyle="italic"/> 

</font-family> 

그러나 실제로 이러한 가중치를 실제로 사용하는 방법을 알 수는 없습니다. XML (레이아웃/스타일) 파일 또는 Java 코드 그 (것)들은 TextView를 위해 유효한 fontWeight 속성이없고, ResourcesCompat.getFont(context, R.font.archivo_narrow)에서 창조되는 Typeface 목표에는 글꼴 무게의 아무 언급도 없다.

특정 글꼴 리소스 (즉, R.font.archivo_narrow_semibold)를 지정할 수 있다는 것을 알았지 만 font-familyfontWeight 속성이있는 것은 무엇입니까?

답변

-1

안드로이드와 같은 글꼴 관리 및 크기 조정을위한 웹 표준을 따르는 것처럼 보입니다.

"font-weight"속성은 일반 글꼴이나 굵은 글꼴과 같은 글꼴의 가중치를 정의하는 데 사용됩니다.

그러나 다른 모든 무게의 경우 100에서 900 사이의 숫자 범위가 사용됩니다. 웹 글꼴의 문제점 중 하나는 대부분의 웹 브라우저가 보통 & 굵게 글꼴 외곽선을 올바르게 지원하지 않는다는 것입니다. 다음 차트는 숫자 정의와 무게의 가능한 매핑을 설명

100 Extra Light or Ultra Light 
200 Light or Thin 
300 Book or Demi 
400 Normal or Regular 
500 Medium 
600 Semibold, Demibold 
700 Bold 
800 Black, Extra Bold or Heavy 
900 Extra Black, Fat, Poster or Ultra Black 

당신은 글꼴 두께 here


cc_montserrat_bold.xml

<?xml version="1.0" encoding="utf-8"?> 
<font-family xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <font 
     android:font="@font/montserrat_bold" 
     android:fontStyle="normal" 
     android:fontWeight="700" 
     app:font="@font/montserrat_bold" 
     app:fontStyle="normal" 
     app:fontWeight="700" /> 
    <font 
     android:font="@font/montserrat_bolditalic" 
     android:fontStyle="italic" 
     android:fontWeight="700" 
     app:font="@font/montserrat_bolditalic" 
     app:fontStyle="italic" 
     app:fontWeight="700" /> 

</font-family> 

cc_montserrat_regular에 대한 자세한 내용을보실 수 있습니다 .xml

,
<?xml version="1.0" encoding="utf-8"?> 
<font-family xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <font 
     android:font="@font/montserrat_regular" 
     android:fontStyle="normal" 
     android:fontWeight="400" 
     app:font="@font/montserrat_regular" 
     app:fontStyle="normal" 
     app:fontWeight="400" /> 
    <font 
     android:font="@font/montserrat_italic" 
     android:fontStyle="italic" 
     android:fontWeight="400" 
     app:font="@font/montserrat_italic" 
     app:fontStyle="italic" 
     app:fontWeight="400" /> 


</font-family> 

코 틀린 사용법 :

val textView = dialog.findViewById<TextView>(android.R.id.message) as TextView 
val typeface = ResourcesCompat.getFont(context,R.font.cc_montserrat_regular) 
     textView.typeface = typeface 

안드로이드 프로젝트 스크린 샷 :

enter image description here

+0

예 하지만 어떻게 사용 * 다양한 글꼴 - 무게 *합니까? – Bryan

+0

글꼴을 개별적으로 식별하기 위해 가중치를주지 마십시오. 너 혼란스러워하는 걸 내가 보여줄 수있어? –

+0

'font-weight' 속성을'' 태그 안에 지정할 수는 있지만 코드 내 다른 곳의 다른 곳에서는 font-weight 속성을 참조 할 수 없습니다.나는 * 무게를 설정할 수 있습니다 * 나는 * 사용할 수 없습니다 * 무게). ['textStyle'] (https://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle) 속성이 있지만'bold','italic' 또는'bold 만 지정할 수 있습니다 기울임 꼴. 예를 들어'semibold '는 없습니다. – Bryan

0

편집 :/

:이 솔루션은 요구하지 않습니다 0

나는 당신이 원하는 것이라고 생각하는 Typeface.Builder 클래스를 발견했습니다. 불행히도 API 레벨 26 이상에서만 사용할 수 있습니다. 아마도 compat 라이브러리가 곧 나타날 것입니다.

https://developer.android.com/reference/android/graphics/Typeface.Builder.html

Typeface.Builder buidler = new Typeface.Builder("your_font_file.ttf"); 
builder.setFontVariationSettings("'wght' 700, 'slnt' 20, 'ital' 1"); 
builder.setWeight(700); // Tell the system that this is a bold font. 
builder.setItalic(true); // Tell the system that this is an italic style font. 
Typeface typeface = builder.build(); 
+0

안타깝게도 'Typeface.Builder'를 통해서만 가중치를 설정할 수 있습니다. 생성 된 'Typeface'를 통해 그 가중치를 참조 할 수있는 방법은 아직 없습니다. – Bryan

+0

그래, 미안, 나는 무게 입력을 발견하고 완전히 이해하지 않고 흥분했다. - 당신의 StackOverflow가 똑같은 것을 알아내는 것을 발견했습니다. 내가 찾을 수있는 모든 소스 코드를 통해 trawling 후 글꼴 스타일을 지정할 경우 글꼴 패밀리를 참조하면 가장 가까운 가중치를 굵게 (700) 얻는 것이 가장 어렵습니다. 그렇지 않으면 400에 가장 가까운 것을 찾습니다. 원하는 체중을 요청할 방법이 없습니다. 다행히도 그들은 그것을 곧 넣을 것이고, 대부분의 디자인에서 내 제목 무게로 사용되는 세미 굵은 글씨체를 사용하고 무게 입력을하는 것이 유용 할 것입니다. – kassim

관련 문제