NavigationView의 항목 텍스트 크기를 어떻게 변경할 수 있습니까?
Google은 최근 에 NavigationDrawer 생성 프로세스를 크게 단순화 (및 표준화) 하는 android.support.design.widget.NavigationView위젯을 com.android.support:design:22.2.0라이브러리의 일부로 출시 했습니다 .
그러나 디자인 사양 에 따라 목록 항목은 Roboto Medium, 14sp, 87 % # 000000 이어야합니다 . 이 NavigationView노출은 아니오 textSize또는 textStyle사용자 정의합니다.
 
Google에서 제공NavigationView 하는 올바른 설계 사양 을 유지 하거나 다른 방식으로 사용자 정의하는 것에 대해 현명한 경우 어떻게해야 합니까?
Android 지원 라이브러리 22.2.1 이후 Google은 항목의 기본 textSize NavigationView를 16sp에서 14sp로 변경 하여 머티리얼 디자인 가이드 라인에 잘 맞습니다. 그러나 경우에 따라 (예 : 중국어를 지원하려는 경우) textSize가 클수록 좋습니다. 해결책은 간단합니다.
- 추가 
app:theme="@style/yourStyle.Drawer"당신에게NavigationView당신의 layout.xml에 - styles.xml 
android:textSize="16sp"에서 스타일 추가yourStyle.Drawer 
파일에서 새 스타일 만들기 app/src/main/res/values/styles.xml
<style name="NavigationDrawerStyle">
        <item name="android:textSize">20sp</item><!-- text size in menu-->
        <!-- item size in menu-->
        <item name="android:listPreferredItemHeightSmall">40dp</item>
        <item name="listPreferredItemHeightSmall">40dp</item>
        <!-- item padding left in menu-->
        <item name="android:listPreferredItemPaddingLeft">8dp</item>
        <item name="listPreferredItemPaddingLeft">8dp</item>
        <!-- item padding right in menu-->
        <item name="android:listPreferredItemPaddingRight">8dp</item>
        <item name="listPreferredItemPaddingRight">8dp</item>
    </style>
 
당신의 main_layout.xml
  <android.support.design.widget.NavigationView
       ...
        app:theme="@style/NavigationDrawerStyle"
       ....>
    </android.support.design.widget.NavigationView>
 
탐색 항목의 모든 매개 변수 (변경할 수 있음)는 여기 (파일 경로 ...\sdk\extras\android\support\design\res\layout\design_navigation_item.xml)에 있습니다.
design_navigation_item.xml 
<android.support.design.internal.NavigationMenuItemView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?attr/listPreferredItemHeightSmall"
    android:paddingLeft="?attr/listPreferredItemPaddingLeft"
    android:paddingRight="?attr/listPreferredItemPaddingRight"
    android:drawablePadding="@dimen/navigation_icon_padding"
    android:gravity="center_vertical|start"
    android:maxLines="1"
    android:fontFamily="sans-serif-thin"
    android:textSize="22sp"
    android:textAppearance="?attr/textAppearanceListItem" />
 
또한 당신은 대체 할 수 있습니다 *.xml파일 (복사 파일을 ...\sdk\extras\android\support\design\res\layout\design_navigation_item.xml사용자의 단지에) app/src/main/res/layout폴더가 같은 이름 레이아웃을 생성 design_navigation_item.xml.
덮어 쓸 수있는 모든 레이아웃이 여기에 있습니다. ...\sdk\extras\android\support\design\res\layout\
design_layout_snackbar.xml
design_layout_snackbar_include.xml
design_layout_tab_icon.xml
design_layout_tab_text.xml
design_navigation_item.xml
design_navigation_item_header.xml
design_navigation_item_separator.xml
design_navigation_item_subheader.xml
design_navigation_menu.xml
 
[업데이트]com.android.support:design-{version} lib의 각 버전에는 재정의 할 항목이 다릅니다. 필요한 모든 것을 확인하십시오
style.xml에서 텍스트 색상에서 크기 및 글꼴까지 모든 것을 사용자 정의 할 수 있습니다.
<style name="NavDrawerTextStyle" parent="Base.TextAppearance.AppCompat">
    <item name="android:textColor">@color/colorPrimaryDark</item>
    <item name="android:textSize">16sp</item>
    <item name="android:textStyle">bold</item>
</style>
 
그리고 당신의 NavigationView:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<android.support.design.widget.NavigationView
    ...
    android:itemTextAppearance="@style/NavDrawerTextStyle"
     />
 
xml 파일 내에서이 속성을 사용할 수 있습니다.
app:itemTextAppearance="?android:attr/textAppearanceMedium"
 
또는 작은 텍스트
app:itemTextAppearance="?android:attr/textAppearance"
 
또는 큰 텍스트
app:itemTextAppearance="?android:attr/textAppearanceLarge"
이것은 나를 위해 일했습니다.
activity_main.xml
<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:theme="@style/NavigationDrawerStyle"
    app:headerLayout="@layout/navdrawer_header"
    app:menu="@menu/navdrawer_menu" />
 
styles.xml
<style name="NavigationDrawerStyle">
    <item name="android:textSize">16sp</item>
</style>
소스 코드를 살펴보면서이 레이아웃 파일을 찾았습니다.
/platform/frameworks/support/.../design/res/layout/design_drawer_item.xml
다음 속성
<android.support.design.internal.NavigationMenuItemView
    ...
    android:textAppearance="?attr/textAppearanceListItem"
 
즉, 우리가해야 할 일은 textAppearanceListItem프로젝트 의 스타일 을 재정의하는 것뿐이었습니다.
res / values / styles.xml
<style name="AppTheme" ... >
    ...
    <item name="textAppearanceListItem">@style/list_item_appearance</item>
</style>
<style name="list_item_appearance">
    <item name="android:textSize">14sp</item>
    <item name="android:fontFamily">sans-serif-medium</item>
</style>
 
나는 이것이 다른 어떤 영향을 미칠지 완전히 확신하지 못하지만 누군가가 더 나은 대답을 가지고 있다면 대신 그것을 받아 들일 것입니다!
아마도 도움이 될 것입니다. 최근에 저는 이것을 프로그래밍 방식으로해야했습니다. 이 수업을 사용했습니다.
public class CustomTypefaceSpan extends TypefaceSpan {
private final Typeface newType;
private final float newSp;
public CustomTypefaceSpan(String family, Typeface type, float sp) {
    super(family);
    newType = type;
    newSp = sp;
}
@Override
public void updateDrawState(TextPaint ds) {
    applyCustomTypeFace(ds, newType, newSp);
}
@Override
public void updateMeasureState(TextPaint paint) {
    applyCustomTypeFace(paint, newType, newSp);
}
private static void applyCustomTypeFace(Paint paint, Typeface tf, float sp) {
    int oldStyle;
    Typeface old = paint.getTypeface();
    if (old == null) {
        oldStyle = 0;
    } else {
        oldStyle = old.getStyle();
    }
    int fake = oldStyle & ~tf.getStyle();
    if ((fake & Typeface.BOLD) != 0) {
        paint.setFakeBoldText(true);
    }
    if ((fake & Typeface.ITALIC) != 0) {
        paint.setTextSkewX(-0.25f);
    }
    paint.setTextSize(sp);
    paint.setTypeface(tf);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<CustomTypefaceSpan> CREATOR = new Parcelable.Creator<CustomTypefaceSpan>() {
    @Override
    public CustomTypefaceSpan createFromParcel(Parcel in) {
        return null;
    }
    @Override
    public CustomTypefaceSpan[] newArray(int size) {
        return new CustomTypefaceSpan[size];
    }
};
}
 
그런 다음 다음과 같이 사용했습니다.
// This is for color
SpannableString s = new SpannableString(item.getTitle().toString());
                    s.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
// This is for typeface and size
Typeface typeFace = Functions.getTypeface(this, "Avenir");
if (typeFace != null) {
    int size = 19;
    float scaledSizeInPixels = size * getResources().getDisplayMetrics().scaledDensity;
    CustomTypefaceSpan spanTypeFace = new CustomTypefaceSpan(item.getTitle().toString(), typeFace, scaledSizeInPixels);
    s.setSpan(spanTypeFace, 0, s.length(), 0);
}
item.setTitle(s);
 
도움이 되었기를 바랍니다.
탐색 모음의 어댑터 레이아웃 나열 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:padding="10dp"
    android:orientation="horizontal"
    android:background="@drawable/pressed_state">
    <TextView
        android:id="@+id/textView_list_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imageView_icons"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:textColor="@color/white"
        android:textSize="17sp" />
    <ImageView 
        android:id="@+id/list_adapter_image"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:visibility="visible"
        android:layout_marginRight="50dp"
        android:background="@drawable/circle_orange"/>
</RelativeLayout>
<LinearLayout 
    android:layout_height="1dp"
    android:layout_width="match_parent"
    android:background="#EC1294"></LinearLayout>
</LinearLayout>
 
RelativeLayout의이 매개 변수는 배경색을 설정합니다.-> android : background = "@ drawable / pressed_state"
드로어 블 폴더에 "pressed_state.xml"을 만듭니다.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
 <item android:drawable="@color/light_blue" android:state_pressed="true"/>
 
 
제 영어 실례합니다.
activity_main.xml로 이동하여 디자인에서 nav_view를 선택 하고 다음과 같이 itemTextAppearance 및 itemTextColor 를 업데이트하여 메뉴 항목 텍스트 크기를 변경할 수 있습니다.
- values \ dimens.xml 열기 또는 만들기
 - 이 코드를 추가하십시오.
 
<dimen name="design_bottom_navigation_text_size" tools:override="true">11sp</dimen>
<dimen name="design_bottom_navigation_active_text_size" tools:override="true">12sp</dimen>
 
작동합니다
참고 URL : https://stackoverflow.com/questions/31204320/how-can-i-change-the-navigationviews-item-text-size
'Program Tip' 카테고리의 다른 글
| TabLayout 탭 제목 텍스트 (소문자) (0) | 2020.12.09 | 
|---|---|
| leftBarButtonItem을 설정 한 후 UINavigationController에서 뒤로 / 왼쪽 스 와이프 제스처를 활성화하는 방법은 무엇입니까? (0) | 2020.12.09 | 
| Go 프로그래밍 언어는 어떤 언어로 작성 되나요? (0) | 2020.12.09 | 
| 객체 지향 언어의 HAS-A, IS-A 용어 (0) | 2020.12.09 | 
| Android Spinner를 팝업으로 생성하려면 어떻게해야합니까? (0) | 2020.12.09 | 
