Android支持库 - 从NavigationView获取标题TextView

时间:2016-09-05 05:49:17

标签: java android fonts android-support-library

是否可以为TextView获得MenuItem的{​​{1}}标题? (我想改变字体)

drawer_menu.xml

NavigationView

我的布局:

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

    <group android:checkableBehavior="single">

        <item
        android:id="@+id/cards"
        android:icon="@drawable/ic_menu_cards"
        android:clickable="false"
        android:title="Cards"
        app:showAsAction="always"/>

        <item
        android:id="@+id/waiter"
        android:icon="@drawable/ic_menu_waiter"
        android:clickable="false"
        android:title="Timer Mode"
        app:showAsAction="always"/>

        <item
        android:id="@+id/settings"
        android:icon="@drawable/ic_menu_settings"
        android:title="Settings"
        app:showAsAction="always"/>


        <item
        android:id="@+id/purchase"
        android:icon="@drawable/ic_menu_purchase"
        android:clickable="false"
        android:title="Purchase"
        app:showAsAction="always"/>

        <item
        android:id="@+id/feedback"
        android:icon="@drawable/ic_menu_feedback"
        android:clickable="false"
        android:title="Feedback"
        app:showAsAction="always"/>
    </group>
</menu>

我已经看到了将<android.support.v4.widget.DrawerLayout android:id="@+id/drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- Removed for simplicity --> </LinearLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_gravity="start" android:theme="@style/NavigationDrawer" app:headerLayout="@layout/navigation_view_header" app:itemTextColor="@color/white" app:menu="@menu/drawer_menu" /> </android.support.v4.widget.DrawerLayout> 转换为MenuItem的其他示例,但在我的情况下,它只返回null。

TextView

如何访问标题以便操作字体?

更多背景信息:

我通常使用DataBindings设置字体,但对于Android支持库组件,这不起作用,因此我必须手动访问TextView并将其设置为:

TextView title = (TextView) navigationView.getMenu().getItem(0) <-- TextView becomes null

1 个答案:

答案 0 :(得分:0)

我终于找到了办法。它不是很漂亮,但它有效。

将MenuItems传递给方法:

setMenuItemFont(binding.navigationView.getMenu().getItem(0));

方法如下:

private void setMenuItemFont(MenuItem menuItem) {
    SpannableString span = new SpannableString(menuItem.getTitle());
    span.setSpan(new CustomTypefaceSpan(FontCache.getInstance(getApplicationContext()).get("lato_regular")), 0 , span.length(),  Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    menuItem.setTitle(span);
}

扩展TypefaceSpan的助手类:

package android.app.app;

import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;

public class CustomTypefaceSpan extends TypefaceSpan {

    private final Typeface newType;

    public CustomTypefaceSpan(Typeface type) {
        super("");
        newType = type;
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setTypeface(newType);
    }

    @Override
    public void updateMeasureState(TextPaint paint) {
        paint.setTypeface(newType);
    }
}