Android Design Support library 23.1.1 追記
Android Design Support library 23.1.1ではNavigationViewも更新されています。
ヘッダーを
View headerView = navigationView.getHeaderView(0);
のように取得出来るため、下記の例であれば
MainActivity.java
View headerView = navigationView.getHeaderView(0);
ImageView header = (ImageView)headerView.findViewById(R.id.header_image);
とすることでヘッダー内のViewを扱うことが出来ます。
以下は23.1.0の頃の古い情報になります。
例えば、
activity_main.xml
<android.support.design.widget.NavigationView
android:id="@+id/navi_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/menu_main" />
header.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@color/primaryColor">
<ImageView
android:id="@+id/header_image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
のようなレイアウトの場合、コード上で
MainActivity.java
ImageView header = (ImageView)findViewById(R.id.header_image);
といった形で平易にViewを取得出来たのですが、23.1.0ではこれがnullとなり取得出来なくなりました……。
調べると既に報告がありましたが、現状の対応策としては下記のようにNavigationViewのリスナーで取得するほかないようです。
navigationView.addOnLayoutChangeListener( new View.OnLayoutChangeListener() { @Override public void onLayoutChange( ... ) { navigationView.removeOnLayoutChangeListener( this ); View view = navigationView.findViewById( ... ); } } );