如何更改NavigationView的项目文本大小?

jay*_*jay 58 android navigation-drawer material-design androiddesignsupport

谷歌最近发布了这个android.support.design.widget.NavigationView小部件作为com.android.support:design:22.2.0库的一部分,它大大简化(和标准化)创建NavigationDrawer的过程.

但是根据设计规格,列表项应该是Roboto Medium,14sp,87%#000000.在NavigationView不公开任何textSizetextStyle定制的.

材料设计规格 字体样式信息

如果我使用谷歌提供的NavigationView(或以任何其他方式自定义)维护正确的设计规范,我有什么选择?

Nic*_*hek 104

创造风格

<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>
Run Code Online (Sandbox Code Playgroud)

将它添加到main_layout.xml

  <android.support.design.widget.NavigationView
       ...
        app:theme="@style/NavigationDrawerStyle"
       ....>


    </android.support.design.widget.NavigationView>
Run Code Online (Sandbox Code Playgroud)

所有参数(您可以更改)都位于此处更改导航项目.

您也可以覆盖app/src/main/res/values/styles.xml文件(从中复制文件main_layout.xml),只需在您的...\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" />
Run Code Online (Sandbox Code Playgroud)

所有可以Overriden的布局都在这里 *.xml

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
Run Code Online (Sandbox Code Playgroud)

[更新]每个版本的...\sdk\extras\android\support\design\res\layout\design_navigation_item.xmllib都有不同的项目要覆盖.检查所有你需要的东西

在此输入图像描述


yww*_*ynm 55

自Android支持库22.2.1起,Google已将项目的默认textSize NavigationView从16sp更改为14sp,这很适合Material Design指南.但是,在某些情况下(例如,当您想支持中文时),似乎更大的textSize更好.解决方案很简单:

  1. 添加app:theme="@style/yourStyle.Drawer"NavigationViewlayout.xml中
  2. 在styles.xml中,添加android:textSize="16sp"样式yourStyle.Drawer


ojo*_*ifu 54

您可以在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>
Run Code Online (Sandbox Code Playgroud)

然后在你的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"
     />
Run Code Online (Sandbox Code Playgroud)

  • 嘿,当我将 android:itemTextAppearance="@style/NavDrawerTextStyle"/&gt; 更改为 app:itemTextAppearance="@style/NavDrawerTextStyle"/&gt; 时,这对我有用 (4认同)

Mos*_*ter 14

你可以在xml文件中使用这个属性

app:itemTextAppearance="?android:attr/textAppearanceMedium"
Run Code Online (Sandbox Code Playgroud)

或小文本

app:itemTextAppearance="?android:attr/textAppearance"
Run Code Online (Sandbox Code Playgroud)

或大文本

app:itemTextAppearance="?android:attr/textAppearanceLarge"
Run Code Online (Sandbox Code Playgroud)


Phi*_*ert 9

这对我有用:

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" />
Run Code Online (Sandbox Code Playgroud)

styles.xml

<style name="NavigationDrawerStyle">
    <item name="android:textSize">16sp</item>
</style>
Run Code Online (Sandbox Code Playgroud)


jay*_*jay 6

仔细检查源代码,我找到了这个布局文件

/platform/frameworks/support/.../design/res/layout/design_drawer_item.xml

具有以下属性

<android.support.design.internal.NavigationMenuItemView
    ...
    android:textAppearance="?attr/textAppearanceListItem"
Run Code Online (Sandbox Code Playgroud)

这意味着我们所要做的就是覆盖textAppearanceListItem项目中的风格.


RES /值/ 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>
Run Code Online (Sandbox Code Playgroud)

我不完全确定这会影响到什么,但如果有人有更好的答案,我会乐意接受它!